共用方式為


<algorithm>

定義可執行演算法的 C++ 標準程式庫容器範本函式。

Syntax

(see links below for specific algorithm syntax)

注意

連結 <algorithm> 庫也會使用 #include <initializer_list> 語句。

備註

C++標準連結庫演算法可以在各種數據結構上運作。 他們可以操作的數據結構不僅包括 和 之類的vectorlist標準連結庫容器類別C++,而且包含使用者定義的數據結構和元素陣列,只要它們滿足特定演算法的需求。 C++ 標準程式庫演算法間接透過迭代器存取和周遊容器的元素,來達成這個一般性層級。

C++ 標準程式庫演算法會處理通常透過開始或結束位置指定的迭代器範圍。 所參考的範圍必須有效,也就是說,範圍中的所有反覆運算器都必須可取值,而且在每個範圍的序列中,必須藉由遞增反覆運算器從第一個位置觸達最後一個位置。

從 C++20 開始,在 中 <algorithm> 定義的大部分演算法也會以採用 range的形式提供。 例如,您可以呼叫 ,而不是呼叫 sort(v1.begin(), v1.end(), greater<int>());ranges::sort(v1, greater<int>());

C++標準連結庫演算法可以同時使用不同類型的容器物件。 已使用兩個後綴來傳達演算法用途的相關信息:

  • _if 綴表示演算法會與函式物件搭配使用,這些物件會針對元素的值運作,而不是在元素本身上運作。 例如,演算法會 find_if 尋找符合函式物件所指定準則的專案,而演算法則會 find 搜尋特定值。

  • _copy後綴表示演算法通常會修改複製的值,而不是複製修改的值。 換句話說,它們不會修改來源範圍的元素,而是將結果放入輸出範圍/反覆運算器中。 例如,演算法 reverse 會反轉某個範圍內元素的順序,而 reverse_copy 演算法會將反向結果複製到目的範圍。

C++標準連結庫演算法通常會分類為群組,以指出其用途或需求。 這些包括修改演算法,與不修改的演算法相比,變更元素的值。 變動演算法變更項目的順序,但不變更項目的值。 移除演算法可以從範圍或範圍的複本排除項目。 排序演算法會以各種方式重新排序某個範圍中的元素,而排序範圍演算法只會處理以特定方式排序元素的範圍。

提供給數值處理的標準連結庫數值演算法C++有自己的頭檔 <numeric>,而且函式物件和配接器定義於標頭 <functional>中。 傳回布爾值的函式對象稱為述詞。 預設二元述詞是比較 operator<。 一般而言,要排序的元素必須小於可比性,如此一來,假設任何兩個元素,都可以判斷它們相等(從意義上說兩者都不小於另一個元素),或一個小於另一個元素。 這會導致在非對等元件中的排序。

演算法

名稱 描述
adjacent_find 搜尋等於或符合指定之條件的兩個相鄰項目。
all_of 當條件出現在指定的範圍中的每個項目時,傳回 true
any_of 當條件出現在指定的項目範圍至少一次時,傳回 true
binary_search 測試已排序的範圍中是否有等於指定之值 (或在二元述詞指定的意義上,相當於該值) 的項目。
clamp
copy 從來源範圍將項目的值指定到目的範圍,逐一查看項目的來源序列,並以正向方向指派它們新位置。
copy_backward 從來源範圍將項目的值指定到目的範圍,逐一查看項目的來源序列,並以反向方向指派它們新位置。
copy_if 複製特定範圍中針對指定的條件測試為 true 的所有項目
copy_n 複製指定的項目數目。
count 傳回範圍中值符合指定值的項目數目。
count_if 傳回範圍中值符合指定條件的項目數目。
equal 逐一比較兩個範圍的每個項目是否相等 (或在二元述詞指定的意義上,是否對等)。
equal_range 在已排序的範圍中尋找一對位置,第一個位置小於或等於指定項目的位置,第二個位置大於該項目的位置,其中用於建立序列中位置的等價或順序意義可由二元述詞指定。
fill 將相同的新值指派到指定範圍內的每個項目。
fill_n 指派新值給範圍中以特定項目開頭的指定項目數。
find 在範圍中找出有指定值的第一個項目的位置。
find_end 在範圍中尋找與指定序列相同 (或在二元述詞指定的意義上,相當於該序列) 的最後一個子序列。
find_first_of 在目標範圍內搜尋第一次出現的任何多個值,或第一次出現的任何多個項目 (在二元述詞指定的意義上,相當於指定之項目集合)。
find_if 在範圍中找出滿足特定條件的第一個項目的位置。
find_if_not 傳回指定範圍中不符合條件的第一個專案。
for_each 將指定的函式物件以正向順序套用至範圍內的每個項目,並傳回函式物件。
for_each_n
generate 將函式物件產生的值指派給範圍內的每個項目。
generate_n 將函式物件產生的值指派給範圍內的指定項目數,並返回到超過最後一個指定值的位置。
includes 測試一個排序範圍是否包含第二個排序範圍內的所有項目,其中項目之間的順序或等價準則可由二元述詞指定。
inplace_merge 將兩個連續排序範圍內的項目結合成單一排序範圍,其中順序準則可由二元述詞指定。
is_heap 如果在指定範圍內的項目形成堆積,則傳回 true
is_heap_until 如果指定的範圍形成堆積直到最後項目,則傳回 true
is_partitioned 如果在指定範圍內針對條件測試為 true 的所有項目都是在測試為 true 的任何項目之前,傳回 false
is_permutation 判斷指定的範圍中的元素是否構成有效的排列。
is_sorted 如果在指定範圍內的項目為已排序順序,則傳回 true
is_sorted_until 如果在指定範圍內的項目為已排序順序,則傳回 true
iter_swap 交換由一組指定之迭代器所參考的兩個值。
lexicographical_compare 逐一比較兩個序列之間的每個項目,判斷兩者較小者。
lower_bound 在已排序範圍中尋找值大於或相當於指定值的第一個項目的位置,其中順序準則可由二元述詞指定。
make_heap 將在指定範圍內的項目轉換為堆積,其中第一個項目是最大,而且排序準則可由二元述詞指定。
max 比較兩個物件並傳回兩者較大者,其中順序準則可由二元述詞指定。
max_element 在指定的範圍內尋找第一個最大項目,其中順序準則可由二元述詞指定。
merge 將兩個排序來源範圍內的所有項目結合成單一排序目的範圍,其中順序準則可由二元述詞指定。
min 比較兩個物件並傳回兩者較小者,其中順序準則可由二元述詞指定。
min_element 在指定的範圍內尋找第一個最小項目,其中順序準則可由二元述詞指定。
minmax 比較兩個輸入參數並做為一組傳回,從最小排到最大。
minmax_element 在一個呼叫中執行 min_elementmax_element 所執行的工作。
mismatch 逐一比較兩個範圍的每個項目是否相等 (或在二元述詞指定的意義上,是否對等),而且找出差異發生的第一個位置。
<alg> move 移動與所指定範圍相關聯的項目。
move_backward 將一個迭代器的項目移至另一個迭代器。 從指定範圍內的最後一個項目開始移動,並以該範圍內的第一個項目結束。
next_permutation 重新排列範圍的項目,讓原始順序由語彙方面下一個較大的排列取代 (如果有的話),其中下一個的意義可由二元述詞指定。
none_of 當條件從未出現在指定的範圍中的項目時,傳回 true
nth_element 分割某範圍的元素,將序列的第 n 個元素正確放入範圍中,以便在它前面的所有元素小於或等於它,而且序列中在它後面的所有元素大於或等於它。
partial_sort 將範圍中指定的較小項目數目排列成非遞減排列,或是依據二元述詞指定的順序準則。
partial_sort_copy 從來源範圍將項目複製到目的範圍,其中來源項目是依小於排序,或依據二元述詞指定的順序準則。
partition 將範圍中的項目分類為兩個斷續集合,而滿足一元述詞的項目在無法滿足一元述詞的項目之前。
partition_copy 將條件是 true 的項目複製到一個目的地,並將條件是 false 的項目複製到另一個目的地。 項目必須來自指定的範圍。
partition_point 傳回指定範圍中不符合條件的第一個專案。 元素會進行排序,讓滿足條件的元素在不符合條件之前。
pop_heap 從堆積的前面移動最大的項目至範圍的倒數第二個位置,然後從其餘項目形成新的堆積。
prev_permutation 重新排列範圍的項目,讓原始順序由語彙方面下一個較大的排列取代 (如果有的話),其中下一個的意義可由二元述詞指定。
push_heap 將在範圍結尾的項目加入至由範圍中之前項目所組成的現有堆積。
random_shuffle 將範圍中 N 個元素的序列重新整理為 N! 排列方式隨機選取的其中一個。
remove 從指定範圍中排除指定的值,而不會干擾其餘項目的順序,並傳回沒有指定值、新範圍的結尾。
remove_copy 將專案從來源範圍複製到目的範圍,但未複製指定值的專案,而不會干擾其餘專案的順序,並傳回新目的地範圍的結尾。
remove_copy_if 將專案從來源範圍複製到目的範圍,但無法複製滿足述詞,而不會干擾其餘元素的順序,並傳回新目的地範圍的結尾。
remove_if 從指定範圍中排除滿足述詞的項目,而不會干擾其餘項目的順序,並傳回沒有指定值、新範圍的結尾。
replace 檢查範圍內的每個項目,如果符合指定的值則予以取代。
replace_copy 檢查來源範圍內的每個項目,如果符合指定的值則予以取代,同時將結果複製到新目的範圍。
replace_copy_if 檢查來源範圍內的每個項目,如果滿足指定的述詞則予以取代,同時將結果複製到新目的範圍。
replace_if 檢查範圍內的每個項目,如果滿足指定的述詞則予以取代。
reverse 反轉範圍內項目的順序。
reverse_copy 反轉來源範圍內項目的順序,並將其複製到目的範圍
rotate 交換兩個相鄰範圍的項目。
rotate_copy 交換來源範圍內兩個相鄰範圍的項目,並將結果複製到目的範圍。
sample
search 在目標範圍中搜尋第一個序列,其項目等於指定項目序列中的項目,或在二元述詞指定的意義上,其項目相當於指定序列中的項目。
search_n 在範圍中搜尋包含指定項目數的第一個子序列,這些項目具有特定值或在二元述詞指定的意義上與該值關聯。
set_difference 將屬於一個排序來源範圍但不屬於第二個排序來源範圍的所有項目聯集為單一排序的目的範圍,其中順序準則可由二元述詞指定。
set_intersection 將屬於兩個排序來源範圍的所有項目聯集為單一排序目的範圍,其中順序準則可由二元述詞指定。
set_symmetric_difference 將屬於兩個排序來源範圍之一 (但非兩者) 的所有項目聯集為單一排序目的範圍,其中順序準則可由二元述詞指定。
set_union 將至少屬於兩個排序來源範圍之一的所有項目聯集為單一排序目的範圍,其中順序準則可由二元述詞指定。
sort 將在指定範圍中的項目排列成非遞減排列,或是依據二元述詞指定的順序準則。
shuffle 使用亂數產生器隨機播放 (重新整理) 指定範圍的項目。
sort_heap 將堆積轉換為排序的範圍。
stable_partition 將範圍中的項目分類為兩個斷續集合,而滿足一元述詞的項目在無法滿足一元述詞的項目之前,保留對等項目的相對順序。
stable_sort 將在指定範圍中的項目排列成非遞減排列,或是依據二元述詞指定的順序準則,並保留對等項目的相對順序。
swap 在兩種類型的物件之間交換項目的值,將第一個物件的內容指派給第二個物件,並將第一個物件的內容指派給第一個物件。
swap_ranges 將某個範圍的項目與另一個相等大小之範圍的項目交換。
transform 將指定的函式物件應用至來源範圍中的每個項目,或是一組來自兩個來源範圍的項目,並複製函式物件的傳回值到目的範圍。
unique 拿掉指定範圍中彼此相鄰的重複專案。
unique_copy 從來源範圍將專案複製到目的範圍,但彼此相鄰的重複專案除外。
upper_bound 在已排序範圍中尋找值大於指定值的第一個項目的位置,其中順序準則可由二元述詞指定。

另請參閱

標頭檔參考
C++ 標準程式庫中的執行緒安全
C++ 標準程式庫參考