C++ 容器分兩大類:順序容器(按位置存取)與 關聯容器(按鍵值高效查找)。順序容器含適配器。
一、順序容器
1. 定義與初始化
#include // vector
#include // list
#include // deque
vector vi; list li; deque di;
初始化方式豐富:空容器、複製構造、迭代器區間、n 個值 t、n 個值初始化元素。
2. 迭代器運算
- 所有順序容器通用:解引用
*iter、成員存取 iter->mem、遞增遞減、相等比較。
- vector/deque 專屬:算術運算
iter + n、iter - n、復合賦值、減法得距離、關係運算 < > <= >=。
迭代器失效:修改容器結構的操作會使指向被移動元素的迭代器失效。
3. 核心操作
| 操作 | 函數 | 說明 |
| 添加元素 | push_back, push_front(list/deque), insert | insert 可插入單值、n 個值、區間元素 |
| 大小操作 | size, max_size, empty, resize | resize 可指定填充值 |
| 存取元素 | front, back, operator[], at(vector/deque) | at 有邊界檢查 |
| 刪除元素 | erase, clear, pop_back, pop_front(list/deque) | erase 返回下一有效迭代器 |
| 賦值與交換 | operator=, swap, assign | swap 極快,assign 重設內容 |
4. vector 容量管理
size():當前元素數;capacity():重新分配前可容納元素數,通常 > size。
reserve(n):預留空間,避免頻繁重新分配(預設策略為容量加倍)。
5. 容器選用建議
- 需隨機存取 →
vector 或 deque
- 中間頻繁增刪 →
list
- 首尾增刪 →
deque
- 輸入時中間插入、後期隨機存取 → 先
list 再複製到 vector
- 既需隨機存取又需中間增刪 → 視主導操作而定
6. 容器適配器
- stack:LIFO,基於 deque。操作:push, pop, top, empty, size。
- queue:FIFO,基於 deque。操作:push, pop, front, back, empty, size。
- priority_queue:優先級隊列,基於 vector。操作:push, pop, top, empty, size。
預設構造函數與接受容器參數的構造函數。
二、關聯容器
1. pair
雙元組模板 pair<T1, T2>,支援字典序比較、相等判斷、make_pair 建構。成員 first、second 為公有資料成員。
2. map(鍵值對集合,鍵唯一)
- 定義:
map<string, int> word_count;
- 鍵類型需支援
< 運算子(嚴格弱序)。
value_type 為 pair<const Key, Value>,鍵不可修改。
- 插入:
insert 返回 pair<iterator, bool>;下標操作若鍵不存在會自動插入值初始化元素。
- 查找:
find 返回迭代器,count 返回 0/1。
- 刪除:
erase(key)、erase(iterator)、erase(range)。
3. set(鍵即值,唯一)
- 初始化自動去重。無下標操作,用
find/count 查找。
4. multimap / multiset(鍵可重複)
- 相同鍵的元素相鄰存放。提供
lower_bound、upper_bound、equal_range 區間查詢。
本文出自「我的學習筆記」博客,轉載請保留出處:https://6924918.blog.51cto.com/6914918/1275726
- 上一篇文章: 演算法精講:歸併排序原理與 C++ 實現
- 下一篇文章: C++ 讀寫 TDM/TDMS 文件實戰:NI 第三方庫使用與效能分析
Copyright ©
程式碼之家 All Rights Reserved