C++編程必備神器STL——常用算法

C++標準函數庫中,爲我們提供了一個algorithm庫,裏面包含了十分多的常用算法,下面我來做一個小小的總結

非修改序列操作

adjacent_find   查找兩個相鄰(Adjacent)的等價(Identical)元素
all_of (C++11)  檢測在給定範圍中是否所有元素都滿足給定的條件
any_of (C++11)  檢測在給定範圍中是否存在元素滿足給定條件
count   返回值等價於給定值的元素的個數
count_if    返回值滿足給定條件的元素的個數
equal   返回兩個範圍是否相等
find    返回第一個值等價於給定值的元素
find_end    查找範圍 A 中與範圍 B 等價的子範圍最後出現的位置
find_first_of   查找範圍 A 中第一個與範圍 B 中任一元素等價的元素的位置
find_if 返回第一個值滿足給定條件的元素
find_if_not (C++11) 返回第一個值不滿足給定條件的元素
for_each    對範圍中的每個元素調用指定函數
mismatch    返回兩個範圍中第一個元素不等價的位置
none_of (C++11) 檢測在給定範圍中是否不存在元素滿足給定的條件
search  在範圍 A 中查找第一個與範圍 B 等價的子範圍的位置
search_n    在給定範圍中查找第一個連續 n 個元素都等價於給定值的子範圍的位置

修改序列操作

copy    將一個範圍中的元素拷貝到新的位置處
copy_backward   將一個範圍中的元素按逆序拷貝到新的位置處
copy_if (C++11) 將一個範圍中滿足給定條件的元素拷貝到新的位置處
copy_n (C++11)  拷貝 n 個元素到新的位置處
fill    將一個範圍的元素賦值爲給定值
fill_n  將某個位置開始的 n 個元素賦值爲給定值
generate    將一個函數的執行結果保存到指定範圍的元素中,用於批量賦值範圍中的元素
generate_n  將一個函數的執行結果保存到指定位置開始的 n 個元素中
iter_swap   交換兩個迭代器(Iterator)指向的元素
move (C++11)    將一個範圍中的元素移動到新的位置處
move_backward (C++11)   將一個範圍中的元素按逆序移動到新的位置處
random_shuffle  隨機打亂指定範圍中的元素的位置
remove  將一個範圍中值等價於給定值的元素刪除
remove_if   將一個範圍中值滿足給定條件的元素刪除
remove_copy 拷貝一個範圍的元素,將其中值等價於給定值的元素刪除
remove_copy_if  拷貝一個範圍的元素,將其中值滿足給定條件的元素刪除
replace 將一個範圍中值等價於給定值的元素賦值爲新的值
replace_copy    拷貝一個範圍的元素,將其中值等價於給定值的元素賦值爲新的值
replace_copy_if 拷貝一個範圍的元素,將其中值滿足給定條件的元素賦值爲新的值
replace_if  將一個範圍中值滿足給定條件的元素賦值爲新的值
reverse 反轉排序指定範圍中的元素
reverse_copy    拷貝指定範圍的反轉排序結果
rotate  循環移動指定範圍中的元素
rotate_copy 拷貝指定範圍的循環移動結果
shuffle (C++11) 用指定的隨機數引擎隨機打亂指定範圍中的元素的位置
swap    交換兩個對象的值
swap_ranges 交換兩個範圍的元素
transform   對指定範圍中的每個元素調用某個函數以改變元素的值
unique  刪除指定範圍中的所有連續重複元素,僅僅留下每組等值元素中的第一個元素。
unique_copy 拷貝指定範圍的唯一化(參考上述的 unique)結果

劃分

is_partitioned (C++11)  檢測某個範圍是否按指定謂詞(Predicate)劃分過
partition   將某個範圍劃分爲兩組
partition_copy (C++11)  拷貝指定範圍的劃分結果
partition_point (C++11) 返回被劃分範圍的劃分點
stable_partition    穩定劃分,兩組元素各維持相對順序

排序

is_sorted (C++11)   檢測指定範圍是否已排序
is_sorted_until (C++11) 返回最大已排序子範圍
nth_element 部份排序指定範圍中的元素,使得範圍按給定位置處的元素劃分
partial_sort    部份排序
partial_sort_copy   拷貝部分排序的結果
sort    排序(快速排序)
stable_sort 穩定排序

二分法查找(用於已劃分/已排序的序列)

binary_search   判斷範圍中是否存在值等價於給定值的元素
equal_range 返回範圍中值等於給定值的元素組成的子範圍
lower_bound 返回指向範圍中第一個值大於或等於給定值的元素的迭代器
upper_bound 返回指向範圍中第一個值大於給定值的元素的迭代器

合併(用於已排序的序列)

includes    判斷一個集合是否是另一個集合的子集
inplace_merge   就緒合併
merge   合併
set_difference  獲得兩個集合的差集
set_intersection    獲得兩個集合的交集
set_symmetric_difference    獲得兩個集合的對稱差
set_union   獲得兩個集合的並集

is_heap 檢測給定範圍是否滿足堆結構
is_heap_until (C++11)   檢測給定範圍中滿足堆結構的最大子範圍
make_heap   用給定範圍構造出一個堆
pop_heap    從一個堆中刪除最大的元素
push_heap   向堆中增加一個元素
sort_heap   將滿足堆結構的範圍排序

最大/最小值

is_permutation (C++11)  判斷一個序列是否是另一個序列的一種排序 
max 返回兩個元素中值最大的元素
max_element 返回給定範圍中值最大的元素
min 返回兩個元素中值最小的元素
min_element 返回給定範圍中值最小的元素
minmax (C++11)  返回兩個元素中值最大及最小的元素
minmax_element (C++11)  返回給定範圍中值最大及最小的元素

其他

lexicographical_compare 比較兩個序列的字典序
next_permutation    返回給定範圍中的元素組成的下一個按字典序的排列
prev_permutation    返回給定範圍中的元素組成的上一個按字典序的排列

最後給大家推薦一個很好的C++網站,裏面有學習資源、參考資源等,十分強大,各種庫,各種庫函數的原型及示例都有,只不過是英文,但是都寫的很簡潔,很好理解
http://www.cplusplus.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章