1. 程式人生 > >C++Primer第五版 第三章習題答案(31~40)

C++Primer第五版 第三章習題答案(31~40)

1:這個的話沒什麼難度吧,記住下標從0開始就好了

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{	
	int a[10] = {0,1,2,3,4,5,6,7,8,9};
	for (int i=0;i<10;i++)
	{
		cout<<"a["<<i<<"]"<<" = "<<a[i]<<endl;//注意輸出的格式要美觀
	}
} 

2:關於陣列的拷貝,不可以將整個陣列賦值給另一個數組
,只能逐個元素的拷貝。

如果利用vector,可以直接將整個vector拷貝給另一個vector。

另外vector不可以便利的像陣列那樣直接花括號定義(貌似新版支援了~)

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{	
	int a[10] = {0,1,2,3,4,5,6,7,8,9};
	int b[10];
	for (int i=0;i<10;i++)
	{
		cout<<"a["<<i<<"]"<<" = "<<a[i]<<endl;
		b[i] = a[i];
		cout<<"b["<<i<<"]"<<" = "<<b[i]<<endl;
	}
} 
vector版本
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{	
	int a[10] = {0,1,2,3,4,5,6,7,8,9};
	vector<int> v1(a,a+10);//vector的賦值並不可以像陣列一樣方便的用花括號方便的賦值,這裡借用了陣列來初始化這個vector
	vector<int> v2 = v1;
	int b[10];
	for (int i=0;i<10;i++)
	{
		cout<<"a["<<i<<"]"<<" = "<<a[i]<<endl;
		b[i] = a[i];
		cout<<"b["<<i<<"]"<<" = "<<b[i]<<endl;
		cout<<"v1["<<i<<"]"<<" = "<<v1[i]<<endl;
		cout<<"v2["<<i<<"]"<<" = "<<v2[i]<<endl;
	}
} 


3:在函式體內不初始化當然是未知啊~

4:p1和p2是指標,相減為其地址相減,因為指向的是同一元素,地址相同,因次p1地址不變。

只要p1和p2合法,這個語句就是合法的。

5:用一個指標指向陣列的首地址,不斷遞增即可

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{	
	int a[10] = {0,1,2,3,4,5,6,7,8,9};
	for (int i=0;i<10;i++)
	{
		cout<<"a["<<i<<"]"<<" = "<<a[i]<<endl;
	}
	int *p = a; //賦給p陣列a的首地址
	for (int j=0;j<10;j++)
	{
		*p = 0;  //指標所指物件的改變
		cout<<"a["<<j<<"]"<<" = "<<a[j]<<endl;
		p++; //指標的遞增
	}
} 
6:比較陣列相等,先比較陣列的大小,再比較陣列的每個元素。

vector的比較,直接判斷是否相等即可。

陣列的比較:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{	
	int a[10] = {0,1,2,3,4,5,6,7,8,9};
	int b[10] = {0,1,2,3,4,5,6,7,8,9};
	int Myflag = 0;
	if (sizeof(a) == sizeof(b))
	{
		for (int i=0;i<10;i++)
		{
			if (a[i] == b[i])
			{
				Myflag++;
			}
		}
	}
	if (Myflag == 10)
	{
		cout<<"Equal"<<endl;
	}
	else
	{
		cout<<"Not Equal"<<endl;
	}
}
vector的比較:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{	
	int a[10] = {0,1,2,3,4,5,6,7,8,9};
	int b[10] = {0,1,2,3,4,5,6,7,8,9};
	vector<int> v1(a,a+10);
	vector<int> v2(b,b+10);
	int Myflag = 0;
	if (sizeof(a) == sizeof(b))
	{
		for (int i=0;i<10;i++)
		{
			if (a[i] == b[i])
			{
				Myflag++;
			}
		}
	}
	if (v1 == v2)
	{
		cout<<"Equal"<<endl;
	}
	else
	{
		cout<<"Not Equal"<<endl;
	}
}

7:輸出:hello

8:指標指代的是物件的地址,相加是地址相加,難以區分到底什麼意義。

9:C++風格的字串比較是字串本身的比較

C風格的字串比較是字串首地址的比較

10:主要是兩個函式的學習

strcpy(a,b); 將b拷貝給a

strcat(c,d); 將d加於c後

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{	
	char a[100] = "Hello World";
	char b[100] = "I want an apple";
	char c[200];
	strcpy(c,a);
	strcat(c," ");
	strcat(c,b);
	cout<<c;
}