C++ 頭文件系列 (algorithm)。本站提示廣大學習愛好者:(C++ 頭文件系列 (algorithm))文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 頭文件系列 (algorithm)正文
簡介
algorithm頭文件是C++的規范算法庫,它次要使用在容器上。 由於一切的算法都是經過迭代器停止操作的,所以算法的運算實踐上是和詳細的數據構造相別離的 ,也就是說,具有低耦合性。 因而,任何數據構造都能運用這套算法庫,只需它具有相應的迭代器類型。
算法類別
如上圖所示,庫中的算法次要分為4類:
- 非修正性順序操作(Non-modifying sequence operations)
- 可變順序操作(Mutating sequence operations)
- 排序和關系操作(Sorting and related operations)
- C庫算法(C library algorithms)
算法版本
用過這個算法庫的人都知道,外面的很多算法都是成對呈現的,一個概念的算法常常有多個版本:
- in-place version: 普通版本,直接操作對迭代器停止操作。
- copying version: 拷貝版本,需求傳入輸入迭代器作為拷貝的destination。 該版本普通帶有
copy
字樣。
- predicate version: 謂詞版本,需求傳入謂詞作為判別的規范。 該版本普通帶有
if
字樣。
Non-modifying sequence operations
- all_of : 判別能否范圍內的一切元素都滿足條件。
- any_of : 判別能否范圍內的一切元素中有一個滿足條件。
- none_of : 判別能否范圍內的一切元素中沒有一個滿足條件。
- for_each : 對指定范圍內的每一個元素停止指定的操作。
- find、find_if、find_if_not : 在指定范圍中查找滿足某個條件(值相等、條件滿足、條件不滿足)的元素。
- find_end : 在指定序列中查找最後一個相等(或滿足謂詞條件)子序列。
- find_first_of : 在指定序列中查找第一個呈現在另一個序列中(或滿足謂詞條件)的元素。
- adjacent_find : 在指定序列中查找第一個相等(值相等、滿足條件)的元素對(2個元素)。
- count、count_if : 對制定序列中的滿足條件(值相等、滿足條件)的元素停止計數。
- mismatch : 給定兩個元素序列,前往第一個不婚配(值不相等、不滿足條件)的元素地位,以一個迭代器對指出。
- equal : 判別兩個序列能否相等(值相等、滿足謂詞條件)。
- is_permutation : 判別能否一個序列是另一個序列的陳列,即只要陳列方式不相等(值不相等、不滿足謂詞條件)。
- search、search_n : 在給定序列中查找子序列或許n個反復的元素序列。
Mutating sequence operations
- copy、copy_n、copy_if、copy_backward : 拷貝序列、拷貝序列中前n個元素、拷貝序列中滿足條件的、從後往前拷貝序列。
- move、move_backward : 挪動序列、從後往前挪動序列(挪動後,任然可以對源序列停止操作,但元素值是未指定的)。
- swap、iter_swap : 逐元素交流序列、交流兩個序列。
- transform : 對一個 序列停止變換並輸入、對兩個序列停止變換並輸入(變換經過自定義謂詞來完成)。
- replace、replace_if、replace_copy、replace_copy_if : 交換滿足條件(值相等、滿足謂詞條件)的元素為給定元素、交換滿足條件的元素並將其拷貝至別處。
- fill、fill_n : 將給定序列元素填充為給定值、 將給定的前n個元素填充為給定值。
- generate、generate_n : 用自定義的生成器生成元素,並將這些元素賦值給給定序列或前n個序列。
- remove、remove_if : 移除相等或滿足謂詞條件的元素。 留意,若有元素被移除,指向這些元素之後的迭代器的可以運用,但後果是未指定的(unspecified)。
- unique、unique_copy : 使序列獨一(即若有反復元素,保存第一個,其他全部移除)、是序列獨一並拷貝至目的地。
- reverse、reverse_copy : 將給定序列逆轉、將給定序列逆轉並拷貝至目的地。
- rotate、rotate_copy : 將給定序列左旋轉(middle - first)個元素、將給定序列左旋轉(middle - first)個元素並拷貝。
- shuffle : 運用平均隨機數生成器將給定序列洗牌(即打亂,重新散布)。
上面幾個函數有關分區的同一方面,但又功用卻不想下面所列那麼類似,故而分開敘說:
- is_partition : 用給定的一元謂詞判別給定序列能否被正確分區(即前一局部元素調用謂詞前往true,後一局部前往false)。
- partition : 對給定序列停止分區操作。
- stable_partition : 與partition操作類似,但是兩個group(即分區成的兩個分區)內元素的相關順序堅持不變(stable)。
- partition_copy : 與partition類似,但是兩個分區group後果被拷貝到兩個指定的地位。
- partition_point : 前往分區點,該點之前、該點之後(包括該點)辨別為兩個分區。
Sorting and related operations
這些函數都有兩個版本:運用operator < 的、運用函數子Compare的。
- sort : 排序。
- stable_sort : 波動排序。
- partial_sort : 局部排序,關於給定的序列,只排序前middle - first個元素,並將它們放置在[first, middle)范圍中,剩余地位的元素順序為指定。
- partial_sort_copy : paartial_sort函數的copy版本。
- is_sorted、is_sorted_util : 判別給定序列能否為已排序(運用operator < 或 自定義函數子判別)的。
- nth_element : 將nth迭代器指定的地位排序為後果元素。(實踐上應該是運用快排完成的)
- lower_bound、upper_bound、equal_range : 前往下界、上界、相等性范圍。
- binary_search : 在給定序列中對元素停止二分查找。
- merge、inplace_merge : 兼並兩個序列並輸入。
- includes : 判別能否一個序列重的一切元素都被包括在另一個序列中。
- set_union : 並集。
- set_intersection : 交集。
- set_difference : 差集。
- set_symmetric_difference : 對稱差集。
- push_heap : 將一個元素push進由序列表示的heap中,並維持堆得性質。
- pop_heap : 將一個元素從heap中pop(實踐上被交流到尾部)。
- make_heap : 將給定序列結構成heap。
- sort_heap : 對給定堆停止排序(能夠有特殊的算法對堆排序停止優化)。
- is_heap、is_heap_util : 判別給定序列能否為堆、判別給定序列到哪個地位之前為堆。
- min、max : 前往最小值、最大值。
- minmax : 前往pair
- min_element、max_element : 前往序列中第一個最小值、最大值。
- minmax_element : 前往pair
- lexicographical_compare : 對兩個序列停止字典序排序。
- next_permutation、prev_permutation : 判別給定序列能否存在下一個或許上一個組合(一切能夠的陳列組合先由字典序排序,再停止判別)。
C library algorithms
該頭文件還包括了規范C頭文件stdlib.h
,大體相反。 只是出於與C兼容的目的,bsearch
和 qsort
同時包括了C和C++的兩個函數簽名。