1. 程式人生 > 實用技巧 >《C++Primer Plus》 | 複合型別

《C++Primer Plus》 | 複合型別

陣列

typeName arrayName[arraySize]

  1. 要求arraySize在編譯是已知,不能是變數。
  2. 陣列作為由基本型別組成的複合資料型別,arrayName要強調是對應基本資料型別組成的陣列(特定陣列)
  3. 通過下標或索引單獨訪問各個元素(可能引發陣列越界的問題,int a[20],容易錯誤訪問a[20])
  4. 陣列可使用列表初始化,即C++11可省略=
char ch[4]{'0','\0',65,'5'};
65在char的範圍內

字串

char string[4]={'H','e','r','\0'};

char string[]="Her";
已空字元結尾的字元陣列是字串,C-風格字串,第二種是隱式寫法,會自動加'\0'

cout << "I am a student.\n";
cout <<"I am"   " a student.\n";
cout <<"I a"  "m a student.\n";

C++允許字串的拼接,第一個字串的隱式'\0'會被第二個字串的第一個字元代替
cstring中含strlen()函式,字元陣列的長度不能小於strlen()+1.
cin>> name1
cin>> name2
cin已空格,製表符,換行符確定字串結束,例如在name1是輸入Bob Tom,Bob放到name1,Tom留在輸入佇列,無需在輸入,cin會在輸入佇列中讀取Bob


cin.getline(stringname,num)
以上為將鍵盤輸入寫入到stringname[num]的字元陣列,num包含'\0'
getline()成員函式按行輸入,遇到'\n'結束,捨棄換行符,get()不捨棄換行符,連續輸入採用cin.get(s,num).get()的方式。

cin.getline().getline() //可以看成連續兩次呼叫getline
cin.get().get()//cin.get()返回cin物件,這是一種拼接方式
(cin>>year).get()//處理'\n'  year 為int
cin.get(s,num)

string類

#include

string str1;
string str2;
string str3;
cin >> str1;//C++自動調整str1的長度
st2r=str1;
str1=str2+str3;

#include

strcpy(s1,s2)//copy s2 to s1
strcat(s1,s2)//s1+=s2,即append s2 to s1
s1.size()//結果與strlen()等價,但有.說明是物件.類方法(函式)

vector&array模板

#include <iostream>
#include<vector>  //STL C++98 ,動態陣列的替代品
#include<array>  //C++11


int main()
{
using namespace std;
double a[4]={1.4,1.2,3.5,6.7};
vector <double> b(4);//個數常量或變數
b[0]=1.4;
b[1]=1.2;
b[2]=3.5;
b[3]=6.7;
array <double,4> c={1.4,1.2,3.5,6.7};
array <double,4> d;//個數必為常量
d=c;
cout << "a[2]:" <<a[2]<<"is located at: "<< &a[2]<< endl;
cout << "b[2]:" <<b[2]<<"is located at: "<< &b[2]<< endl;
cout << "c[2]:" <<c[2]<<"is located at: "<< &c[2]<< endl;
cout << "d[2]:" <<d[2]<<"is located at: "<< &d[2]<< endl;
}

vector物件在自由儲存區或堆區,array物件,陣列在棧區,array物件可以賦值給另一個物件,陣列只能一個一個賦值