STL 演算法主要定義於 <algorithm>、<numeric>、<functional>。本文將 100+ 個演算函數分為 10 大類,附帶功能說明與常用範例。
不修改容器內容,僅讀取。
| 函數 | 功能 |
|---|---|
find | 在範圍內尋找值,回傳迭代器 |
find_if | 依一元謂詞尋找 |
find_if_not | 依一元謂詞尋找不符合者 |
find_end | 尋找子序列最後一次出現位置 |
find_first_of | 尋找任一集合元素首次出現 |
adjacent_find | 尋找相鄰重複元素 |
count/count_if | 計算符合值/條件的元素個數 |
mismatch | 平行比較兩序列,回傳首個不符位置 |
equal | 判斷兩序列在範圍內完全相等 |
search/search_n | 尋找子序列/連續 n 個相同值 |
binary_search | 有序序列二分搜尋 |
lower_bound/upper_bound | 不破壞順序的插入位置下界/上界 |
equal_range | 回傳 [lower_bound, upper_bound) |
| 函數 | 功能 |
|---|---|
copy/copy_backward | 複製區間 (後者從後往前) |
move/move_backward | 移動區間 (C++11) |
copy_if | 依條件複製 |
copy_n | 複製前 n 個元素 |
transform | 對區間每元素應用一元/二元運算,產生新序列 |
replace/replace_if | 替換特定值/符合條件者 |
replace_copy/replace_copy_if | 複製並替換 |
fill/fill_n | 填充指定值 |
generate/generate_n | 以產生器函數填充 |
remove/remove_if | 移除元素 (邏輯移除,實際需配合 erase) |
remove_copy/remove_copy_if | 複製並移除 |
unique/unique_copy | 移除相鄰重複 |
reverse/reverse_copy | 反轉序列 |
rotate/rotate_copy | 旋轉序列 (middle 移至首位) |
random_shuffle/shuffle | 隨機打亂 (C++14 棄用前者) |
swap/swap_ranges | 交換兩物件/區間 |
iter_swap | 交換兩迭代器所指元素 |
| 函數 | 功能 |
|---|---|
sort | 不穩定排序 O(N log N) |
stable_sort | 穩定排序,保持相等元素相對序 |
partial_sort | 部分排序前 N 小元素 |
partial_sort_copy | 複製並部分排序 |
nth_element | 將第 n 小元素放正確位置,左側皆較小 |
is_sorted/is_sorted_until | 檢查是否已排序 |
merge/inplace_merge | 合併兩有序序列 |
partition/stable_partition | 依謂詞分區 |
| 函數 | 功能 |
|---|---|
set_union | 聯集 |
set_intersection | 交集 |
set_difference | 差集 (第一組有、第二組無) |
set_symmetric_difference | 對稱差集 (聯集 - 交集) |
includes | 判斷第一組是否包含第二組 |
| 函數 | 功能 |
|---|---|
make_heap | 建立最大堆 |
push_heap | 插入元素並維持堆性質 |
pop_heap | 移除堆頂並維持堆性質 |
sort_heap | 堆排序 (排序後不再是堆) |
is_heap/is_heap_until | 檢查堆性質 |
| 函數 | 功能 |
|---|---|
min/max | 兩值極值 |
minmax | 同時取得 min/max (C++11) |
min_element/max_element | 區間極值迭代器 |
minmax_element | 同時取得區間 min/max 迭代器 |
lexicographical_compare | 字典序比較 |
clamp | 將值限制在區間內 (C++17) |
| 函數 | 功能 |
|---|---|
next_permutation | 產生下一字典序排列 |
prev_permutation | 產生上一字典序排列 |
is_permutation | 判斷是否為排列關係 |
定義於 <numeric>。
| 函數 | 功能 |
|---|---|
accumulate | 累加 (可自訂二元運算) |
reduce | 平行化累加 (C++17) |
inner_product | 內積 |
transform_reduce | 轉換後累加 (C++17) |
partial_sum | 前綴和 |
inclusive_scan/exclusive_scan | 前綴掃描 (C++17) |
adjacent_difference | 相鄰差分 |
iota | 填充遞增序列 |
gcd/lcm | 最大公約數/最小公倍數 (C++17) |
定義於 <functional>。
plus, minus, multiplies, divides, modulus, negateequal_to, not_equal_to, greater, less, greater_equal, less_equallogical_and, logical_or, logical_notbit_and, bit_or, bit_xor, bit_notbind (C++11), mem_fn, functionstd::execution::par 政策支援多核平行化sample 隨機取樣views::filter, views::transform (C++20 Ranges)erase_if 容器直接移除 (C++20)