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

C++ Primer 第五版 第 3 章學習筆記:string、vector 與數組核心要點

     編輯:關於C++

核心知識點速查

1. string 類精華

  • 初始化:string s(n, 'c') — n 個字符 c;string s = string(10, 'c') 拷貝初始化
  • 整行讀取:while (getline(cin, line)) — 換行符被丟棄,不包含在 string 中
  • 常用操作:s.empty()、s.size() 返回 string::size_type (無符號),避免與 int 混用
  • 拼接:s1 + s2、s1 += "literal" — 至少一邊是 string
  • 遍歷修改:for (auto &c : s) c = toupper(c); — 引用修改原字符

2. vector 容器要點

  • 模板非類型:vector 纔是類型,vector> 需空格隔開雙尖括號 (C++11 前)
  • 列表初始化:vector v{1,2,3};vector v(10) — 10 個空串,非列表初始化
  • 下標訪問:只能訪問已存在元素,不能用於擴容
  • 迭代器:auto it = v.begin(),*it 解引用;兩迭代器相減得 difference_type (帶符號)

3. 數組與指針深度

  • 字符數組:char a[] = "c++" 自動添加 \0;const char s[6] = "Daniel" 錯誤 — 缺終結符空間
  • 指針算術:int *e = &arr[10] 指向尾後;for (int *p = arr; p != e; ++p) 遍歷
  • 指針減法:結果類型 ptrdiff_t (帶符號),定義於 <cstddef>
  • 下標與指針等價:p[-2] == arr[0];內置下標索引是帶符號類型

4. C 風格字符串互操作

  • strlen(ca) 依賴 \0,若字符數組無終結符 → 未定義行為
  • string → const char*:s.c_str(),返回指向內部數組指針,生命週期綁定 string
  • 長期使用建議 strcpy 拷貝一份

5. 多維數組與指針

int ia[3][4];
int (*p)[4] = ia;        // 指向含 4 個 int 的數組指針
int *ip[4];              // 4 個 int* 的數組
int (*ip)[4];            // 指向 int[4] 的指針

習題精選實現 (3.23, 3.43 等)

代碼採用 #define NUM 切換題目,單文件包含所有答案:

  • 3.23:比較兩個 string 大小 / 長度
  • 3.43:二維數組範圍 for 遍歷 for (auto *p = begin(arr); p != end(arr); ++p)
  • 3.41:數組拷貝到 vector vector vec(begin(arr), end(arr))

避坑指南

  1. size() 返回無符號,for (int i = 0; i < v.size(); ++i) 隱式轉換可能預警
  2. vector 下標越界不檢查,at() 會拋出異常
  3. 範圍 for 中用引用 auto &x 修改元素,值傳遞只能讀取
  4. 指針遍歷數組優於下標:無邊界檢查開銷,編譯器優化更好
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved