首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Primer 學習總結第 3 章:字符串、向量與數組核心知識點

     編輯:關於C++

C++ Primer 第 3 章核心筆記:string、vector、array

1. 讀取整行:getline(cin, s)

保留空白字元,可作為 while 條件:while (getline(cin, s))。

2. string 與字面值相加規則

+ 左結合,至少一邊為 string 即可:

string s = "hello" + "world";        // 錯誤:兩邊都是字面值
string s = string("hello") + "world"; // 正確
string s = "hello" + string("world"); // 正確
s = "hello" + "," + "world";          // 錯誤:前兩個相加失敗

3. 陣列初始化細節

int a[3] = {1, 2};     // a = {1,2,0},缺省值 0 初始化
int b[] = {1, 2, 3};   // 推導大小
// 全域/靜態陣列自動 0 初始化
// 局部陣列不初始化則值不定

4. 複雜陣列宣告讀法

從變量名向外讀:int *(&arr)[10] → arr 是 10 元素 int* 陣列的引用。

5. 指標運算陷阱

int arr[] = {1,2,3};
int *p = arr;
cout << *p++ << endl; // 輸出 1,p 指向 arr[1]
cout << *++p << endl; // 輸出 3,p 指向 arr[2]

6. string 底層儲存與指標失效

string s = "abcde";
const char* p = s.c_str(); // p 指向內部數據
s = "ABCDEF"; // 可能重新分配記憶體
cout << p; // 未定義行為!可能輸出舊內容 "abcde"

結論:修改 string 可能導致內部緩衝區遷移,舊指標失效。

7. C++11 陣列初始化 vector

int arr[] = {1,2,3,4,5};
vector v(begin(arr), end(arr)); // 或 v(arr, arr+5)

8. 多維陣列本質:陣列的陣列

int ia[3][4]; // 3 個元素,每個是 4 個 int 的陣列
// 記憶體連續佈局:row-major

9. auto vs decltype 推導陣列名

int a[10];
auto p = a;        // int*(退化為指標)
decltype(a) arr = a; // int[10](保持陣列類型)

10. 範圍 for 遍歷多維陣列

for (auto &row : ia)        // row 類型 int (&)[4]
    for (auto &col : row)     // col 類型 int&
        col = 0;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved