1. 程式人生 > 實用技巧 >C++primer 第三章

C++primer 第三章

· 標頭檔案不應包含using宣告:若某檔案中使用了多個頭檔案(含using宣告) 產生衝突

· string s; cin >> s; string物件讀取時自動忽略開頭的空白(空格符、換行符、製表符等) 並從第一個真正的字元讀起,直到遇見下一處空白為止

· getline:可以讀取空白符,直到遇到換行符為止 (換行符會被讀取進istream,但是會被丟棄不放入string中)

· string.size(): size()返回的型別:size_type 無符號

       Attention:若n為一個負值int,(s.size() < n) == true (帶符號自動轉換無符號)

· string相加:至少有一個物件是string型別

· 字串字面值 != string型別

· vector是模板,而非型別

· vector的元素是物件,而引用不是物件,所以不存在vector的元素是引用

· vector能高效動態增長,無需設定其容量大小 (除非所有元素值相同)

· 如果容器為空,begin和end返回的是同一個迭代器, 尾後迭代器

        由此檢查容器是否為空的辦法:s.begin() != s.end()

· const vector: cbegin()、cend()

· 迭代器失效:改變容量操作(如push_back) → 迭代器失效

       Attention:凡是使用了迭代器的迴圈體,都不要push_back

· 迭代器運算: ①沒有 迭代器 + 迭代器 的操作 ②迭代器 + n 返回 迭代器

       所以比如找一段資料的中間數: mid = beg + (end - beg) / 2 (其中beg、end為頭尾 此操作是 迭代器 + n)

· 陣列中的維度必須是常量表達式: a[d] d必須是const

· 陣列的元素為物件:與vector一致,不存在引用的陣列

· 字元陣列預留空字元: 如char a[6] = "Daniel" // 錯誤,沒有空間可存放空字元

· 一般在使用時,陣列會自動轉換成指標

· 用陣列賦值vector: vector<int> ivec(arr, arr + n) // 反之則不行

· 多維陣列初始化每行的第一個元素: int ia[3][4] = { {0}, {4}, {8} }

· 範圍for語句處理多維陣列:要注意引用,否則將轉換成指標 若不使用引用 i的型別就是int*

             除了最內層迴圈,其他迴圈都必須引用

for (auto &i : ia)
{
    for (auto j : i )   
}