C++ 標準庫提供 6 種順序容器:vector、deque、list、forward_list、array、string。選擇原則:
vectorv1; // 空 vector v2(10, 5); // 10個5 vector v3{v2}; // 拷貝構造 vector v4 = {1,2,3,4,5}; // 列表初始化 list ls(istream_iterator (cin), {}); // 從輸入流構造
c1 = c2 / c1.assign(b, e):拷貝元素,迭代器失效swap(c1, c2):常數時間交換內部結構(除 array 外),迭代器不失效(指向同元素,但屬於另一容器)| 操作 | 適用容器 | 備註 |
|---|---|---|
push_back | vector, deque, list, string | 尾部添加 |
push_front | deque, list, forward_list | 頭部添加 |
insert | 所有 | 指定位置插入,vector/deque 導致後續元素移動 |
emplace_back | C++11 所有 | 原地構造,避免拷貝 |
at(n) / operator[]:隨機訪問(vector, deque, string, array)front() / back():首尾元素引用c.pop_back(); // 刪除尾部 c.pop_front(); // 刪除頭部 (deque, list, forward_list) c.erase(pos); // 刪除單個,返回下一有效迭代器 c.erase(beg, end); // 刪除區間 c.clear(); // 清空
關鍵:erase 返回值必須接收,否則迭代器失效導致 UB。
單向鏈表無 push_back/back,提供 insert_after、erase_after、emplace_after,操作「前驅節點」而非目標節點。
resize(n):擴大用值初始化填充,縮小截斷resize(n, val):擴大用 val 填充capacity() / reserve():僅 vector/string 支援,預分配避免重複擴容substr(pos, len)、append、replace、insert、erases.find(args) // 正向找第一個 s.rfind(args) // 反向找第一個 s.find_first_of(args) // 找任一字元首次出現 s.find_last_not_of(args) // 找最後一個不在集合中的字元 s.compare(s2) // 字典序比較,返回負/0/正
to_string(val):數值 → stringstoi/stol/stod 等:string → 數值,可指定進制、獲取處理字元數在順序容器之上封裝特定介面:
deque,操作 push/pop/topdeque,操作 push/pop/front/backvector + less,操作 push/pop/top適配器不支援迭代器,只能通過介面訪問。
emplace_back 避免臨時對象拷貝