首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

STL 演算法完整分類總覽

     編輯:關於C++

STL 演算法主要定義於 <algorithm>、<numeric>、<functional>。本文將 100+ 個演算函數分為 10 大類,附帶功能說明與常用範例。

1. 非變序演算法:查找與統計

不修改容器內容,僅讀取。

函數功能
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)

2. 變序演算法:複製、移動、轉換

函數功能
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交換兩迭代器所指元素

3. 排序與相關演算法

函數功能
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依謂詞分區

4. 集合演算法 (需有序序列)

函數功能
set_union聯集
set_intersection交集
set_difference差集 (第一組有、第二組無)
set_symmetric_difference對稱差集 (聯集 - 交集)
includes判斷第一組是否包含第二組

5. 堆積演算法

函數功能
make_heap建立最大堆
push_heap插入元素並維持堆性質
pop_heap移除堆頂並維持堆性質
sort_heap堆排序 (排序後不再是堆)
is_heap/is_heap_until檢查堆性質

6. 極值與比較

函數功能
min/max兩值極值
minmax同時取得 min/max (C++11)
min_element/max_element區間極值迭代器
minmax_element同時取得區間 min/max 迭代器
lexicographical_compare字典序比較
clamp將值限制在區間內 (C++17)

7. 排列組合

函數功能
next_permutation產生下一字典序排列
prev_permutation產生上一字典序排列
is_permutation判斷是否為排列關係

8. 數值演算法

定義於 <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)

9. 函數物件與綁定器

定義於 <functional>。

  • 算術:plus, minus, multiplies, divides, modulus, negate
  • 比較:equal_to, not_equal_to, greater, less, greater_equal, less_equal
  • 邏輯:logical_and, logical_or, logical_not
  • 位元:bit_and, bit_or, bit_xor, bit_not
  • 綁定器:bind (C++11), mem_fn, function

10. C++17/20 新增亮點

  • 平行演算法:std::execution::par 政策支援多核平行化
  • 采樣:sample 隨機取樣
  • 區間工廠:views::filter, views::transform (C++20 Ranges)
  • 常用組合:erase_if 容器直接移除 (C++20)

常用演算法分類圖譜

STL 演算法分類圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved