STL 演算法集合

jianzhanger發表於2011-08-11

C++ 演算法(STL) 

非修改性序列操作(12個)

迴圈

for_each()

對序列中的每個元素執行某操作

查詢

find()

在序列中找出某個值的第一次出現的位置

find_if()

在序列中找出符合某謂詞的第一個元素

find_end()

在序列中找出一子序列的最後一次出現的位置

find_first_of()

在序列中找出第一次出現指定值集中之值的位置

adjacent_find()

在序列中找出相鄰的一對值

計數

count()

在序列中統計某個值出現的次數

count_if()

在序列中統計與某謂詞匹配的次數

比較

mismatch()

找出兩個序列相異的第一個元素

equal()

兩個序列中的對應元素都相同時為真

搜尋

search()

在序列中找出一子序列的第一次出現的位置

search_n()

在序列中找出一值的連續n次出現的位置

修改性序列操作(27個)

複製

copy()

從序列的第一個元素起進行復制

copy_backward()

從序列的最後一個元素起進行復制

交換

swap()

交換兩個元素

swap_ranges()

交換指定範圍的元素

iter_swap()

交換由迭代器所指的兩個元素

變換

transform()

將某操作應用於指定範圍的每個元素

替換

replace()

用一個給定值替換一些值

replace_if()

替換滿足謂詞的一些元素

replace_copy()

複製序列時用一給定值替換元素

replace_copy_if()

複製序列時替換滿足謂詞的元素

填充

fill()

用一給定值取代所有元素

fill_n()

用一給定值取代前n個元素

生成

generate()

用一操作的結果取代所有元素

generate_n()

用一操作的結果取代前n個元素

刪除

remove()

刪除具有給定值的元素

remove_if()

刪除滿足謂詞的元素

remove_copy()

複製序列時刪除具有給定值的元素

remove_copy_if()

複製序列時刪除滿足謂詞的元素

唯一

unique()

刪除相鄰的重複元素

unique_copy()

複製序列時刪除相鄰的重複元素

反轉

reverse()

反轉元素的次序

reverse_copy()

複製序列時反轉元素的次序

環移

rotate()

迴圈移動元素

rotate_copy()

複製序列時迴圈移動元素

隨機

random_shuffle()

採用均勻分佈來隨機移動元素

劃分

partition()

將滿足某謂詞的元素都放到前面

stable_partition()

將滿足某謂詞的元素都放到前面並維持原順序


序列排序及相關操作(27個)

排序

sort()

以很好的平均效率排序

stable_sort()

排序,並維持相同元素的原有順序

partial_sort()

將序列的前一部分排好序

partial_sort_copy()

複製的同時將序列的前一部分排好序

第n個元素

nth_element()

將第n各元素放到它的正確位置

二分檢索

lower_bound()

找到大於等於某值的第一次出現

upper_bound()

找到大於某值的第一次出現

equal_range()

找到(在不破壞順序的前提下)可插入給定值的最大範圍

binary_search()

在有序序列中確定給定元素是否存在

歸併

merge()

歸併兩個有序序列

inplace_merge()

歸併兩個接續的有序序列

有序結構上的集合操作

includes()

一序列為另一序列的子序列時為真

set_union()

構造兩個集合的有序並集

set_intersection()

構造兩個集合的有序交集

set_difference()

構造兩個集合的有序差集

set_symmetric_difference()

構造兩個集合的有序對稱差集(並-交)

堆操作

push_heap()

向堆中加入元素

pop_heap()

從堆中彈出元素

make_heap()

從序列構造堆

sort_heap()

給堆排序

最大和最小

min()

兩個值中較小的

max()

兩個值中較大的

min_element()

序列中的最小元素

max_element()

序列中的最大元素

詞典比較

lexicographical_compare()

兩個序列按字典序的第一個在前

排列生成器

next_permutation()

按字典序的下一個排列

prev_permutation()

按字典序的前一個排列

Display all entries for C++ Algorithms on one page, or view entries individually:

accumulate
sum up a range of elements
求和:用初值與指定範圍內的元素相加。過載的版本不再做加法,而是傳進來的二元操作符被應用到元素上。

adjacent_difference
compute the differences between adjacent elements in a range
建立一個新序列,該序列的每個新值都代表了當前元素與上一個元素的差。過載版本用指定的二元操作計算相鄰元素的差。

adjacent_find
finds two items that are adjacent to eachother
在 指定的範圍內,查詢一對相鄰的重複元素,如果找到返回一個 ForwardIterator ,指向這對元素的第一個元素。否則返回 last 。過載版本使用輸入的二元操作符代替相等的判斷。

binary_search
determine if an element exists in a certain range
折半/二分法查詢:在有序序列中查詢 value ,如果找到返回 true 。過載的版本使用指定的比較函式物件或者函式指標來判斷相等。

copy
copy some range of elements to a new location
複製序列。

copy_backward
copy a range of elements in backwards order
除了元素以相反的順序被拷貝外,別的和 copy 相同。

copy_n
copy N elements
只複製N個元素。

count
return the number of elements matching a given value
利用等於操作符,把標誌範圍類的元素與輸入的值進行比較,並返回相等元素的個數。

count_if
return the number of elements for which a predicate is true
對於標誌範圍類的元素,應用輸入的操作符,並返回結果為 true 的次數。

equal
determine if two sets of elements are the same
如果兩個序列在範圍內的元素都相等,則 equal 返回 true 。過載版本使用輸入的操作符代替了預設的等於操作符。

equal_range
search for a range of elements that are all equal to a certain element
返回一對 iterator ,第一個 iterator 表示由 lower_bound 返回的 iterator ,第二個表示由 upper_bound 返回的 iterator 值。

fill
assign a range of elements a certain value
填充:將輸入的值的拷貝賦給範圍內的每個元素。

fill_n
assign a value to some number of elements
填充:將輸入的值賦值給 first 到 frist+n 範圍內的元素。

find
find a value in a given range
查詢:利用底層元素的等於操作符,對範圍內的元素與輸入的值進行比較。當匹配時,結束搜尋,返回該元素的一個 InputIterator 。

find_end
find the last sequence of elements in a certain range
查詢:使用輸入的函式替代了等於操作符執行了 find 。

find_first_of
search for any one of a set of elements
查詢:在範圍內查詢“由輸入的另外一個 iterator 對標誌的第二個序列”的最後一次出現。過載版本中使用了使用者輸入的操作符替代等於操作。

find_if
find the first element for which a certain predicate is true
查詢:在範圍內查詢“由輸入的另外一個 iterator 對標誌的第二個序列”中的任意一個元素的第一次出現。過載版本中使用了使用者自定義的操作符。

for_each
apply a function to a range of elements
依次對範圍內的所有元素執行輸入的函式。

generate
saves the result of a function in a range
通過對輸入的函式 gen 的連續呼叫來填充指定的範圍。

generate_n
saves the result of N applications of a function
填充 n 個元素。

includes
returns true if one set is a subset of another
判斷 [first1, last1) 的一個元素是否被包含在另外一個序列中。使用底層元素的 <= 操作符,過載版本使用使用者輸入的函式。

inner_product
compute the inner product of two ranges of elements
對兩個序列做內積 ( 對應的元素相乘,再求和 ) ,並將內積加到一個輸入的的初始值上。過載版本使用了使用者定義的操作。

inplace_merge
merge two ordered ranges in-place
合併兩個排過序的連續序列,結果序列覆蓋了兩端範圍,過載版本使用輸入的操作進行排序。

is_heap
returns true if a given range is a heap
判斷指定的範圍是否是構成一個堆。

is_sorted
returns true if a range is sorted in ascending order
判斷指定的範圍時候為升序排列。

iter_swap
swaps the elements pointed to by two iterators
交換兩個 ForwardIterator 的值。

lexicographical_compare
returns true if one range is lexicographically less than another
比較兩個序列(使用less)。過載版本使用了使用者自定義的比較操作。

lexicographical_compare_3way
determines if one range is lexicographically less than or greater than another
確定第一個範圍的元素,小於或者大於另一個範圍的元素。
類似於memcmp的返回規則。

lower_bound
search for the first place that a value can be inserted while preserving order
返回一個 iterator ,它指向在範圍內的有序序列中可以插入指定值而不破壞容器順序的第一個位置。過載函式使用了自定義的比較操作。

make_heap
creates a heap out of a range of elements
把範圍內的元素生成一個堆。過載版本使用自定義的比較操作。

max
returns the larger of two elements
返回兩個元素中的較大的一個,過載版本使用了自定義的比較操作。

max_element
returns the largest element in a range
返回一個 iterator ,指出序列中最大的元素。過載版本使用自定義的比較操作。

merge
merge two sorted ranges
合併兩個有序序列,並存放到另外一個序列中。過載版本使用自定義的比較。

min
returns the smaller of two elements
類似於 max ,不過返回最小的元素。

min_element
returns the smallest element in a range
類似於 max_element ,不過返回最小的元素。

mismatch
finds the first position where two ranges differ
並行的比較兩個序列,指出第一個不匹配的位置,它返回一對 iterator ,標誌第一個不匹配的元素位置。如果都匹配,返回每個容器的 last 。過載版本使用自定義的比較操作。

next_permutation
generates the next greater lexicographic permutation of a range of elements
取出當前範圍內的排列,並將其重新排序為下一個排列。過載版本使用自定義的比較操作。

nth_element
put one element in its sorted location and make sure that no elements to its left are greater than any elements to its right
將範圍內的序列重新排序,使所有小於第 n 個元素的元素都出現在它前面,而大於它的都出現在後面,過載版本使用了自定義的比較操作。

partial_sort
sort the first N elements of a range
對整個序列做部分排序,被排序元素的個數正好可以被放到範圍內。過載版本使用自定義的比較操作。

partial_sort_copy
copy and partially sort a range of elements
與 partial_sort 相同,除了將經過排序的序列複製到另外一個容器。

partial_sum
compute the partial sum of a range of elements
建立一個新的元素序列,其中每個元素的值代表了範圍內該位置之前所有元素之和。過載版本使用了自定義操作替代加法。

partition
divide a range of elements into two groups
對範圍內元素重新排序,使用輸入的函式,把計算結果為 true 的元素都放在結果為 false 的元素之前。

pop_heap
remove the largest element from a heap
並不是真正的把最大元素從堆中彈出,而是重新排序堆。它把 first 和 last-1 交換,然後重新做成一個堆。可以使用容器的 back 來訪問被“彈出“的元素或者使用 pop_back 來真正的刪除。過載版本使用自定義的比較操作。

prev_permutation
generates the next smaller lexicographic permutation of a range of elements
取出範圍內的序列並將它重新排序為上一個序列。如果不存在上一個序列則返回 false 。過載版本使用自定義的比較操作。

push_heap
add an element to a heap
假設 first 到 last-1 是一個有效的堆,要被加入堆的元素在位置 last-1 ,重新生成堆。在指向該函式前,必須先把元素插入容器後。過載版本使用指定的比較。

random_sample
randomly copy elements from one range to another

random_sample_n
sample N random elements from a range

random_shuffle
randomly re-order elements in some range
對範圍內的元素隨機調整次序。過載版本輸入一個隨機數產生操作。

remove
remove elements equal to certain value
刪除在範圍內的所有等於指定的元素,注意,該函式並不真正刪除元素。內建陣列不適合使用 remove 和 remove_if 函式。

remove_copy
copy a range of elements omitting those that match a certian value
將所有不匹配的元素都複製到一個指定容器,返回的 OutputIterator 指向被拷貝的末元素的下一個位置。

remove_copy_if
create a copy of a range of elements, omitting any for which a predicate is true
將所有不匹配的元素拷貝到一個指定容器。

remove_if
remove all elements for which a predicate is true
刪除所有範圍內輸入操作結果為 true 的元素。

replace
replace every occurrence of some value in a range with another value
將範圍內的所有等於 old_value 的元素都用 new_value 替代。

replace_copy
copy a range, replacing certain elements with new ones
與 replace 類似,不過將結果寫入另外一個容器。

replace_copy_if
copy a range of elements, replacing those for which a predicate is true
類似與 replace_if ,不過將結果寫入另外一個容器

replace_if
change the values of elements for which a predicate is true
將範圍內的所有操作結果為 true 的元素用新值替代。

reverse
reverse elements in some range
將範圍內元素重新按反序排列。

reverse_copy
create a copy of a range that is reversed
類似與 reverse ,不過將結果寫入另外一個容器。

rotate
move the elements in some range to the left by some amount
將範圍內的元素移到容器末尾,由 middle 指向的元素成為容器第一個元素。

rotate_copy
copy and rotate a range of elements
類似與 rotate ,不過將結果寫入另外一個容器

search
search for a range of elements
給出了兩個範圍,返回一個 iterator ,指向在範圍內第一次出現子序列的位置。過載版本使用自定義的比較操作。

search_n
search for N consecutive copies of an element in some range
在範圍內查詢 value 出現 n 次的子序列。過載版本使用自定義的比較操作。

set_difference
computes the difference between two sets
構造一個排過序的序列,其中的元素出現在第一個序列中,但是不包含在第二個序列中。過載版本使用自定義的比較操作。

set_intersection
computes the intersection of two sets
構造一個排過序的序列,其中的元素在兩個序列中都存在。過載版本使用自定義的比較操作。

set_symmetric_difference
computes the symmetric difference between two sets
構造一個排過序的序列,其中的元素在第一個序列中出現,但是不出現在第二個序列中。過載版本使用自定義的比較操作。

set_union
computes the union of two sets
構造一個排過序的序列,它包含兩個序列中的所有的不重複元素。過載版本使用自定義的比較操作。

sort
sort a range into ascending order
以升序重新排列範圍內的元素,過載版本使用了自定義的比較操作。

sort_heap
turns a heap into a sorted range of elements
對範圍內的序列重新排序,它假設該序列是個有序的堆。過載版本使用自定義的比較操作。

stable_partition
divide elements into two groups while preserving their relative order
與 partition 類似,不過它保證保留容器中的相對順序。

stable_sort
sort a range of elements while preserving order between equal elements
類似與 sort ,不過保留相等元素之間的順序關係。

swap
swap the values of two objects
交換儲存在兩個物件中的值。

swap_ranges
swaps two ranges of elements
將在範圍內的元素與另外一個序列的元素值進行交換。

transform
applies a function to a range of elements
將輸入的操作作用在範圍內的每個元素上,併產生一個新的序列。過載版本將操作作用在一對元素上,另外一個元素來自輸入的另外一個序列。結果輸出到指定的容器。

unique
remove consecutive duplicate elements in a range
清除序列中重複的元素,和 remove 類似,它也不能真正的刪除元素。過載版本使用了自定義的操作。

unique_copy
create a copy of some range of elements that contains no consecutive duplicates
類似與 unique ,不過它把結果輸出到另外一個容器。

upper_bound
searches for the last possible location to insert an element into an ordered range
返回一個 iterator ,它指向在範圍內的有序序列中插入 value 而不破壞容器順序的最後一個位置,該位置標誌了一個大於 value 的值。過載版本使用了輸入的比較操作。

相關文章