迭代器是類指標物件,讓演算法能以統一方式操作不同容器。依能力分五類:
| 類別 | 支援操作 | 典型容器 |
|---|---|---|
| 輸入迭代器 | 單向唯讀 | istream_iterator |
| 輸出迭代器 | 單向唯寫 | ostream_iterator |
| 前向迭代器 | 單向讀寫 | forward_list |
| 雙向迭代器 | 雙向讀寫 | list, set, map |
| 隨機存取迭代器 | 任意跳躍 | vector, deque, array |
back_insert_iterator:透過 push_back 插入front_insert_iterator:透過 push_front 插入insert_iterator:透過 insert 插入reverse_iterator:反向遍歷標準 std::allocator<T> 封裝了記憶體配置、建構、銷毀、釋放等操作,關鍵介面:
allocate(n):配置未初始化記憶體construct(p, val):在記憶體上建構物件destroy(p):呼叫解構函數deallocate(p, n):釋放記憶體rebind<U>::other:型別重綁定,支援容器內部節點配置容器透過模板參數注入配置器,實現記憶體策略客製化(如記憶體池、共享記憶體)。
| 容器 | 底層結構 | 特點 | 適用場景 |
|---|---|---|---|
vector | 動態陣列 | 隨機存取 O(1),尾端增刪 O(1) 攤還,中間增刪 O(n) | 預設首選,需快速索引 |
deque | 分段連續陣列 | 雙端增刪 O(1),隨機存取 O(1),無重新配置拷貝 | 雙端操作頻繁、大量資料 |
list | 雙向鏈表 | 任意位置增刪 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、clear()、erase() 等。
標準化型別別名:value_type、reference、const_reference、iterator、const_iterator、reverse_iterator、difference_type、size_type,便於撰寫泛型程式碼。
map/set 系列array / vectordequelistset / mapmultimap / multiset