容器是能夠存儲其他對象(或指針)的對象類型,封裝了數據存儲與操作邏輯,實現了代碼復用。STL 容器還具備自動內存管理、動態擴展能力,解決了數組大小固定、手動管理內存的痛點。C++ 採用模板實現容器,配合迭代器與算法,構成了強大的泛型編程框架。
| 類別 | 典型容器 | 底層結構 | 核心特點 |
|---|---|---|---|
| 序列容器 | vector, deque, list | 動態數組、分段數組、雙向鏈表 | 元素按插入順序線性存儲,位置由操作時間決定 |
| 關聯容器 | set, multiset, map, multimap | 紅黑樹(平衡二叉搜索樹) | 鍵值對存儲,自動按鍵排序,查找/插入/刪除均為 O(log n) |
| 容器適配器 | stack, queue, priority_queue | 基於序列容器封裝(默認 deque/vector) | 提供特定接口(LIFO/FIFO/優先級),不支持迭代器 |
[]/at(),尾部增刪 O(1) 攤還。四大關聯容器均基於紅黑樹實現,保證操作 O(log n)。
- set/multiset:只存鍵,前者唯一,後者允許重複。
- map/multimap:存鍵值對,鍵唯一/可重複。
- 所有關聯容器默認按鍵升序排列,支持自定義比較函數。
- 迭代器遍歷即為有序遍歷;map 支持 operator[] 類數組訪問(唯一鍵)。
適配器不直接存數據,而是委託底層序列容器:
- stack:需 push_back/pop_back/back → 可用 vector/deque/list。
- queue:需 push_back/pop_front/front/back → 不能用 vector(無 pop_front)。
- priority_queue:需隨機訪問 → 僅能用 vector/deque。
構造時可通過第二模板參數指定底層容器。
vector(預留 reserve())。list。deque。set/map。multiset/multimap。STL 容器將數據結構封裝為標準化接口,配合迭代器與算法,極大提升了 C++ 開發效率。理解各容器的底層結構、複雜度特性與適用場景,是寫出高性能、可維護代碼的關鍵。