Chapter3 字串 向量和陣列

2021-08-08 21:27:33 字數 2406 閱讀 9966

vector 初始化有多種方法,下面將這些方法詳細羅列

vector

v1; //定義了乙個空vector,潛在元素是t型別,執行預設初始化

vector

v2(v1); //v2是v1的拷貝

vector

v2 = v1; //同上

vector

v3(n,val); //v3包含n個重複的元素,每個的值都是val

vector

v4(n); //v4包含n個重複的元素,每個的值都是預設初始化的(通常是0)

vector

v5; //v5包含參數列中的元素

vector

v5=; //同上

//example

int *ptrs[10]; //ptrs是乙個陣列,含有10個int型別指標

int &refs[10] = /*?*/; //refs是乙個陣列,但不存在引用的陣列,因此此定義錯誤

int (*parray)[10] = &arr; //parray是乙個指標,指向乙個含有10個int的陣列

int (&arrref)[10] = arr; //arrref是乙個引用,引用自乙個含有10個int的陣列

讀懂複雜陣列宣告的方法

兩點原則:(這跟讀懂頂層、底層const很相似)

1.定性複雜的宣告中常有* & 也就是指標,引用,陣列這三重修飾詞修飾變數名,找出變數名的本質,也就是變數本質上是乙個指標,引用抑或是陣列. 為了做到這一點依賴於第二點:閱讀次序

2.閱讀次序有括號先讀括號內,無括號從右向左讀. 第乙個讀出的就是變數名的本質

//example

int *(&arry)[10] = ptrs;

//這是乙個複雜的定義,按照上面的原則先對其定性

//有括號先讀括號內,於是知道這是乙個引用

//下一步就是弄清楚這是對什麼的引用

//按照從右往左讀的原則,這是乙個對陣列的引用

//進一步完善,這是乙個對指標陣列的引用,指標型別是int*,陣列有10個元素

int ia =;
ia是陣列名,同時也有另一層含義,即ia是指向ia陣列第乙個元素的指標.

當用auto自動推斷型別時,返回是int* 而不是陣列

而使用關鍵字decltype返回的型別則是由10個整型組成的陣列(int[10])

auto

a_type(ia); //a_type的型別是 int*

decltype(ia) d_type; //d_type的型別是 int[10]

int ia = ;

int *beg = begin(ia); //beg是ia陣列頭指標

int *last = end(ia); //last是ia陣列尾後指標

using matrix = int[10][10];         

matrix mt; //定義了乙個二維陣列

int i = 1;

for (auto &row : mt)

}

要使用範圍for語句處理多維陣列,除了最內層的迴圈外,其他所有迴圈的控制變數都應該是引用型別.

如果不欽定為引用型別,寫成如下形式

//非指定引用

for(auto row : mt)

for(auto col : row)

row將會自動獲取為int*型別,程式無法通過編譯(這一點詳見上述 陣列與指標—陣列名—auto與decltype)

//指定引用

for(auto &row : mt)

for(auto col : row)

row自動獲取型別為int &[10],可以吧row看做是int[10][10]的下一級成員

第二層迴圈中col可看做是row的再下一級成員,即int&[10]的下一級—–int型別

Chapter3 字串 向量和陣列

1 for declaration expression 2 statement vector和陣列都是物件的集合,而引用不是物件。vector物件可以高效地增長,在定義vector物件的時候設定其大小也就沒什麼必要了,事實上如果這麼做效能可能更差。為了便於專門得到const iterator型別的...

《程式設計實踐》chapter3字串

albert einstein alberteinstein albert einstein albert einstein albert einstein albert einstein a hello a 0 3 hel 操作符 表示式 abc def abcdef ab 2 abab ab 0...

Swift文件Chapter 3 字串和字元

swift的字串型別由string型別表示,也有多種訪問方式,例如以character集合方式訪問。字串的字面量是一對雙引號包裹著的具有固定順序的字符集。一對三個引號包裹著的字串是多行字串字面量。字串開始位置為三引號後一行 意味著第乙個換行符不會計入 結束位置是三引號前一行 意味著三引號前的換行符不...