iterator:正向可讀寫const_iterator:正向唯讀reverse_iterator / const_reverse_iterator:反向關鍵函式:begin(), end(), rbegin(), rend()
| 操作 | 函式 |
|---|---|
| 建構 | constructor(n), constructor(n, val) |
| 調整大小 | resize(n), resize(n, val) |
| 賦值 | assign(n, val), assign(beg, end) |
| 插入 | insert(pos, n, val), insert(pos, beg, end) |
| 尾端插入 | push_back(val) |
| 首尾存取 | front(), back() |
| 尾端刪除 | pop_back() |
| 特性 | vector | list | deque |
|---|---|---|---|
| 底層結構 | 動態陣列 | 雙向鏈表 | 分段連續陣列 |
| 隨機存取 | O(1) [], at() | 不支援 | O(1) [], at() |
| 尾端增刪 | 均攤 O(1) | O(1) | O(1) |
| 頭端增刪 | O(n) | O(1) push_front/pop_front | O(1) push_front/pop_front |
| 中間增刪 | O(n) | O(1) (已有迭代器) | O(n) |
| 記憶體碎片 | 低 | 高 (節點分配) | 中 |
| 迭代器失效 | 擴容/插刪後失效 | 僅被刪除元素失效 | 插刪後失效 |
insert(val)find(val) → 迭代器或 end()multimap, multiset) 額外提供:
count(val):統計個數lower_bound(val) / upper_bound(val):等值範圍equal_range(val):回傳 pair<iter, iter>| 容器 | 鍵值對 | 允許重複 Key | operator[] |
|---|---|---|---|
map | pair<Key, Value> | 否 | 是 |
multimap | pair<Key, Value> | 是 | 否 |
set | Key (值即鍵) | 否 | 否 |
multiset | Key | 是 | 否 |
for_each, transformfind, find_if, binary_search (需有序)sort, stable_sort, partial_sort, nth_elementcopy, move, copy_backwardreplace, remove (配合 erase), uniqueaccumulate, min_element, max_element, count, swapstack<T>:push, pop, top, size, empty (LIFO)queue<T>:push, pop, front, back, size, empty (FIFO)priority_queue<T>:最大堆預設,top 為最大元素vector 異常安全存取:
try {
cout << v[1000]; // 不檢查邊界
cout << v.at(1000); // 拋出 std::out_of_range
} catch (const std::exception& e) {
cout << e.what();
}
list 排序去重:
li.sort();
li.unique(); // 僅移除相鄰重複,故需先排序
map 插入與遍歷:
map m;
m.insert({1001, "李明"});
m[1006] = "劉華"; // operator[] 會覆蓋既有 key
for (auto it = m.begin(); it != m.end(); ++it)
cout << it->first << ':' << it->second << '\n';