c primer 筆記,第三章

2021-08-10 08:50:41 字數 2358 閱讀 3888

初始化string物件的6種方式

string s1;      //預設空串

sting s2(s1);

string s2 = s1;

string s3("value"); //直接初始化

string s3 = "value"; //拷貝初始化

string s4(n,'c'); //由連續n個字元c組成的串

在讀寫string物件時,string物件會自動忽略開頭的空白(空格、換行符、製表符)直到遇見下一處空白為止

getline函式以換行符為結尾(換行符也被讀進來了),然後將所讀內容存入string物件中(不存換行符),如果一開始就是個換行符,那麼所得結果就是個空串

string line;     

//讀取一整行並輸出直至檔案末尾

while(getline(cin, line))

cout << line

<< endl;

如果一條表示式裡已經有了size()函式就不要再用int,避免int 與unsigned可能帶來的問題

在使用string加法時,必須確保每個加法運算子(+)兩側的運算物件至少有乙個為string,字串字面值與string型別是不同的型別

例項化:編譯器根據模板建立類或函式的過程

關於列表初始值還是元素數量:

(1)如果是用圓括號(),提供的值是用來構造物件vector的,如果是用花括號,則是列表初始值

vector

v1(10); // v1有10個元素,每個元素值為0

vector

v2; // v2有1個元素,該元素值為10

vector

v3(10,1); // v3有10個元素,每個元素值為1

vector

v3; // v3有2個元素,分別為10,1

(2)如果初始化時使用了花括號但是提供的值卻不能用來列表初始化,就要考慮用該值來構造物件,下面表示式中只有v5為列表初始化,若花括號中的值無法執行列表初始化,編譯器會嘗試用其值來構造vector物件

vector

v5; // 列表初始化,v5有1個元素

vector

v6("hi"); // 錯誤,不能用字串來構建物件

vector

v7; /* 本來應列表初始化,但傳入的值為乙個數字,

則編譯器會將其構造為有10個預設元素的vector */

vector

v3; // 同上,相當於 vectorv3(10,"hi");

所有標準庫容器都定義了==和 != ,但大多數沒有定義 < 運算子,所以在迴圈判斷條件中,對於迭代器應使用 !=

不能在範圍for迴圈中向vector物件新增元素;任何一種可能改變vector容量的操作可能會使迭代器失效

兩個指向同一容器的迭代器相減得到的值為距離,其型別為difference_type的帶符號型整數

預設情況下,型別修飾符從右向左依次繫結 ,所以int *ptr[10]為指標陣列

int *(&array)[10] = ptr;  //array是陣列的引用,該陣列含有10個指標
在很多用到陣列名字的地方,編譯器會自動將其替換成乙個指向該陣列首元素的指標;當使用陣列時真正使用的是指向陣列首元素的指標;兩個指向同一數陣列元素的指標相減得到的結果是兩指標間的距離,型別為ptrdiff_t不能用string物件直接初始化指向字元的指標,可以使用 c_str 成員函式進行轉換完成該功能

string s;

const

char *str = s.c_str();

要使用範圍for語句處理多維陣列,除了最內層迴圈外,其他所有迴圈控制變數都應該是引用型別。這是因為在很多使用陣列名字的地方,編譯器會自動將其替換成乙個指向該陣列首元素的指標。將外層迴圈的控制變數宣告為引用型別是為了避免陣列被自動轉成指標。

/*

該程式無法通過編譯,因為row不是引用型別,編譯器初始化row時會自動

將這些陣列形式的元素轉化成指向該陣列內首元素的指標這樣得到的row型別

就是int*,顯然內層的迴圈就不合法了 ,編譯器將試圖在乙個int*內遍歷

*/int ia[3][4] = ,,};

for(auto row : ia)

for(auto col : row)

cout

<< col << endl;

C Primer 筆記 第三章

c primer 第三章 標準庫型別 3.1using 宣告例 using namespace atd using std cin 3.2string 型別初始化方式 string s1 預設建構函式,s1 為空串string s2 s1 將s2初始化為s1 的乙個副本 string s3 valu...

C primer 複習筆記(第三章)

3.1 用cin讀入string的時候 忽略開頭所有的空白字元 空格 換行符 製表符 直到再次遇到空白字元時終止 3.2 用getline讀入一行文字的時候 不忽略開頭的換行符,儲存的內容不包括換行符 3.3 string 的 size 的型別是 string size type 是無符號型的 3....

c primer 第三章閱讀筆記

3.1 標頭檔案不應包含using宣告 3.2 string p75 表示可變長的字串行 等號初始化叫做拷貝初始化 不使用 則執行的是直接初始化 用多個值進行初始化 string 物件會自動忽略開頭的空白 空格,換行,製表等 並從乙個真正的字元開始讀起,直到遇見下處空白 getline 引數是乙個輸...