STL(標準模板庫)是 C++ 泛型編程基石,掌握其容器體系對高效開發至關重要。本文系統梳理迭代器分類、分配器機制、容器特性對比及通用操作接口。
istream_iterator)ostream_iterator)forward_list)list、set、map)vector、deque、數組指針)back_insert_iterator:調用 push_back(適用 vector/deque/list)front_insert_iterator:調用 push_front(適用 deque/list)insert_iterator:調用 insert(適用所有關聯容器)reverse_iterator:反向遍歷適配器分配器封裝內存管理策略,容器通過模板參數注入,默認 std::allocator 使用 new/delete。核心接口:
allocate(n):分配原始內存(未構造對象)construct(p, val):在內存上構造對象destroy(p):析構對象deallocate(p, n):釋放內存rebind<U>::other:類型重綁定機制自定義分配器可實現內存池、共享內存、對象追蹤等高級功能。
| 容器 | 底層結構 | 隨機訪問 | 頭部插刪 | 尾部插刪 | 中間插刪 |
|---|---|---|---|---|---|
vector | 動態數組 | O(1) | O(n) | O(1)均攤 | O(n) |
deque | 分段數組 | O(1) | O(1) | O(1) | O(n) |
list | 雙向鏈表 | O(n) | O(1) | O(1) | O(1) |
| 容器 | 鍵值關係 | 重複鍵 | 查找複雜度 |
|---|---|---|---|
set | 鍵=值 | 否 | O(log n) |
multiset | 鍵=值 | 是 | O(log n) |
map | 鍵→值 | 否 | O(log n) |
multimap | 鍵→值 | 是 | O(log n) |
stack:LIFO,默認 deque 底層queue:FIFO,默認 deque 底層priority_queue:最大堆,默認 vector 底層== != < 等)empty()、size()、max_size()、swap()begin/end/rbegin/rend 返回迭代器erase()、clear()value_type、reference、iterator、const_iterator、reverse_iterator、difference_type、size_type
vectordequelistset/mapmultiset/multimapstack/queue/priority_queue