C++ 的核心優勢在於軟體重用,體現在兩大範式:
泛型程式設計將常用數據結構(鏈表、數組、二叉樹等)與算法(排序、查找等)寫成模板,使用時無關具體數據類型,避免重複造輪子,且性能極高。
| 組件 | 角色 | 實現形式 |
|---|---|---|
| 容器 | 通用數據結構,可存放任意類型 | 類模板 |
| 迭代器 | 統一存取介面,類似指針 | 類模板 |
| 算法 | 操作容器元素的函數模板 | 函數模板 |
對象插入容器時存入的是副本;許多算法需比較元素,故放入容器的類型通常應重載 == 與 < 運算符。
元素順序由插入位置決定,與值無關。
| 容器 | 底層結構 | 特點 | 頭文件 |
|---|---|---|---|
| vector | 動態數組 | 連續內存,隨機存取 O(1),尾部增刪攤還 O(1) | <vector> |
| deque | 雙端隊列(分段連續) | 隨機存取 O(1),兩端增刪攤還 O(1) | <deque> |
| list | 雙向鏈表 | 非連續內存,任意位置增刪 O(1),不支援隨機存取 | <list> |

元素自動按鍵值排序(通常用紅黑樹實現),查找/插入/刪除均為 O(log N)。
| 容器 | 特點 | 頭文件 |
|---|---|---|
| set / multiset | 鍵值即元素;set 鍵值唯一,multiset 允許重複 | <set> |
| map / multimap | 元素為 pair<Key, Value>,按 Key 排序;map Key 唯一,multimap 允許重複 Key | <map> |
| 適配器 | 行為 | 底層預設容器 | 頭文件 |
|---|---|---|---|
| stack | 後進先出 (LIFO) | deque | <stack> |
| queue | 先進先出 (FIFO) | deque | <queue> |
| priority_queue | 最高優先級先出(最大堆) | vector | <queue> |

begin(), end(), rbegin(), rend()size(), empty(), clear(), erase()front(), back(), push_back(), pop_back()vector v = {1,2,3,4};
// 常量迭代器(只讀)
for (auto it = v.cbegin(); it != v.cend(); ++it) cout << *it << ',';
// 反向迭代器
for (auto rit = v.rbegin(); rit != v.rend(); ++rit) cout << *rit << ',';
// 非常量迭代器(可修改)
for (auto it = v.begin(); it != v.end(); ++it) *it = 100;
| 類別 | 支援操作 | 對應容器 |
|---|---|---|
| 雙向迭代器 | ++ -- * == != = | list, set, map, multiset, multimap |
| 隨機存取迭代器 | 雙向所有操作 + +n -n [] < <= > >= | vector, deque |
容器適配器(stack/queue/priority_queue)不支援迭代器。
<algorithm> 中。[first, last)(左閉右開)。template
InIt find(InIt first, InIt last, const T& val); // 返回指向 val 的迭代器,或 last
operator< 定義「小」:x < y 為真 ⇔ x 比 y 小 ⇔ y 比 x 大。find):x == y 為真。!(x < y) && !(y < x) 視為相等(即嚴格弱序下的等價)。class A {
int v;
public:
A(int v):v(v){}
bool operator<(const A& a) const {
cout << v << "<" << a.v << "? ";
return v < a.v;
}
};
// binary_search 會用 !(a
<algorithm>。operator< 與 operator==。