C++Primer第五版 第三章習題答案(31~40)
阿新 • • 發佈:2019-02-10
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不可以便利的像陣列那樣直接花括號定義(貌似新版支援了~)
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; } }
#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;
}