算法庫(參考手冊)
算法(Algorithm)為一個計算的具體步驟,常用于計算、資料處理和自動推理。C++ 算法庫(Algorithms library)為 C++ 程式提供了大量可以用來對容器及其它序列進行算法操作的函數。這些元件可以為函數或函數模闆,大部份由頭檔案 <algorithm> 提供,一小部份位于 <numeric>、<cstdlib> 中。
在涉及範圍操作時,需要注意的是:通常 C++ 中提及的範圍(如: [first, last))都是半閉半開區間,即第二個疊代器(或指針,本例中為 last)指向的元素是不包含在範圍中的。 還可以參考 vector與法算 主題,該主題包含大量的代碼示例。
-
不修改内容的序列操作
由頭檔案 <algorithm> 定義。adjacent_find
查找兩個相鄰(Adjacent)的等價(Identical)元素
C++11all_of
檢測在給定範圍中是否所有元素都滿足給定的條件
C++11any_of
檢測在給定範圍中是否存在元素滿足給定條件 count
傳回值等價于給定值的元素的個數 count_if
傳回值滿足給定條件的元素的個數 equal
傳回兩個範圍是否相等 find
傳回第一個值等價于給定值的元素 find_end
查找範圍 A 中與範圍 B 等價的子範圍最後出現的位置 find_first_of
查找範圍 A 中第一個與範圍 B 中任一進制素等價的元素的位置 find_if
傳回第一個值滿足給定條件的元素
C++11find_if_not
傳回第一個值不滿足給定條件的元素 for_each
對範圍中的每個元素調用指定函數 mismatch
傳回兩個範圍中第一個元素不等價的位置
C++11none_of
檢測在給定範圍中是否不存在元素滿足給定的條件 search
在範圍 A 中查找第一個與範圍 B 等價的子範圍的位置 search_n
在給定範圍中查找第一個連續 n 個元素都等價于給定值的子範圍的位置 -
修改内容的序列操作
由頭檔案 <algorithm> 定義。copy
将一個範圍中的元素拷貝到新的位置處 copy_backward
将一個範圍中的元素按逆序拷貝到新的位置處
C++11copy_if
将一個範圍中滿足給定條件的元素拷貝到新的位置處
C++11copy_n
拷貝 n 個元素到新的位置處 fill
将一個範圍的元素指派為給定值 fill_n
将某個位置開始的 n 個元素指派為給定值 generate
将一個函數的執行結果儲存到指定範圍的元素中,用于批量指派範圍中的元素 generate_n
将一個函數的執行結果儲存到指定位置開始的 n 個元素中 iter_swap
交換兩個疊代器(Iterator)指向的元素
C++11move
将一個範圍中的元素移動到新的位置處
C++11move_backward
将一個範圍中的元素按逆序移動到新的位置處 random_shuffle
随機打亂指定範圍中的元素的位置 remove
将一個範圍中值等價于給定值的元素删除 remove_if
将一個範圍中值滿足給定條件的元素删除 remove_copy
拷貝一個範圍的元素,将其中值等價于給定值的元素删除 remove_copy_if
拷貝一個範圍的元素,将其中值滿足給定條件的元素删除 replace
将一個範圍中值等價于給定值的元素指派為新的值 replace_copy
拷貝一個範圍的元素,将其中值等價于給定值的元素指派為新的值 replace_copy_if
拷貝一個範圍的元素,将其中值滿足給定條件的元素指派為新的值 replace_if
将一個範圍中值滿足給定條件的元素指派為新的值 reverse
反轉排序指定範圍中的元素 reverse_copy
拷貝指定範圍的反轉排序結果 rotate
循環移動指定範圍中的元素 rotate_copy
拷貝指定範圍的循環移動結果
C++11shuffle
用指定的随機數引擎随機打亂指定範圍中的元素的位置 swap
交換兩個對象的值 swap_ranges
交換兩個範圍的元素 transform
對指定範圍中的每個元素調用某個函數以改變元素的值 unique
删除指定範圍中的所有連續重複元素,僅僅留下每組等值元素中的第一個元素。 unique_copy
拷貝指定範圍的唯一化(參考上述的
)結果unique
-
劃分操作
- ClassFoo 編輯于 07-28
- 版本0
- 評論0
- 我來編輯
C++11is_partitioned
檢測某個範圍是否按指定謂詞(Predicate)劃分過 partition
将某個範圍劃分為兩組
C++11partition_copy
拷貝指定範圍的劃分結果
C++11partition_point
傳回被劃分範圍的劃分點 stable_partition
穩定劃分,兩組元素各維持相對順序 -
排序操作
由頭檔案 <algorithm> 定義。
C++11is_sorted
檢測指定範圍是否已排序
C++11is_sorted_until
傳回最大已排序子範圍 nth_element
部份排序指定範圍中的元素,使得範圍按給定位置處的元素劃分 partial_sort
部份排序 partial_sort_copy
拷貝部分排序的結果 sort
排序 stable_sort
穩定排序 -
二分法查找操作
由頭檔案 <algorithm> 定義。binary_search
判斷範圍中是否存在值等價于給定值的元素 equal_range
傳回範圍中值等于給定值的元素組成的子範圍 lower_bound
傳回指向範圍中第一個值大于或等于給定值的元素的疊代器 upper_bound
傳回指向範圍中第一個值大于給定值的元素的疊代器 -
集合操作
由頭檔案 <algorithm> 定義。includes
判斷一個集合是否是另一個集合的子集 inplace_merge
就緒合并 merge
合并 set_difference
獲得兩個集合的差集 set_intersection
獲得兩個集合的交集 set_symmetric_difference
獲得兩個集合的對稱差 set_union
獲得兩個集合的并集 -
堆操作
由頭檔案 <algorithm> 定義。is_heap
檢測給定範圍是否滿足堆結構
C++11is_heap_until
檢測給定範圍中滿足堆結構的最大子範圍 make_heap
用給定範圍構造出一個堆 pop_heap
從一個堆中删除最大的元素 push_heap
向堆中增加一個元素 sort_heap
将滿足堆結構的範圍排序 -
最大/最小操作
由頭檔案 <algorithm> 定義。
C++11is_permutation
判斷一個序列是否是另一個序列的一種排序 lexicographical_compare
比較兩個序列的字典序 max
傳回兩個元素中值最大的元素 max_element
傳回給定範圍中值最大的元素 min
傳回兩個元素中值最小的元素 min_element
傳回給定範圍中值最小的元素
C++11minmax
傳回兩個元素中值最大及最小的元素
C++11minmax_element
傳回給定範圍中值最大及最小的元素 next_permutation
傳回給定範圍中的元素組成的下一個按字典序的排列 prev_permutation
傳回給定範圍中的元素組成的上一個按字典序的排列 -
數值操作
由頭檔案 <numeric> 定義。accumulate
累加範圍中的元素 adjacent_difference
計算算輸出相鄰元素的內插補點 inner_product
計算兩個範圍的内積
C++11iota
用順序遞增的值指派指定範圍内的元素 partial_sum
部份求和 -
C 庫算法
由頭檔案 <cstdlib> 定義。qsort
快速(Quick)排序 bsearch
二分(Binary)查找 - 大家可以到下面網址檢視每一個算法的詳細介紹及源碼例子展示!!
- 文章出處: http://classfoo.com/ccby/article/tZTzs