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 ) }