天天看點

C++ 算法庫algorithm算法庫(參考手冊)

算法庫(參考手冊)

算法(Algorithm)為一個計算的具體步驟,常用于計算、資料處理和自動推理。C++ 算法庫(Algorithms library)為 C++ 程式提供了大量可以用來對容器及其它序列進行算法操作的函數。這些元件可以為函數或函數模闆,大部份由頭檔案 <algorithm> 提供,一小部份位于 <numeric>、<cstdlib> 中。

在涉及範圍操作時,需要注意的是:通常 C++ 中提及的範圍(如: [first, last))都是半閉半開區間,即第二個疊代器(或指針,本例中為  last)指向的元素是不包含在範圍中的。 還可以參考  vector與法算 主題,該主題包含大量的代碼示例。 

  • 不修改内容的序列操作

    由頭檔案 <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 個元素都等價于給定值的子範圍的位置
  • 修改内容的序列操作

    由頭檔案 <algorithm> 定義。

    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

    )結果
  • 劃分操作

    • ClassFoo 編輯于  07-28
    • 版本0
    • 評論0
    • 我來編輯
    由頭檔案 <algorithm> 定義。

    is_partitioned

     C++11
    檢測某個範圍是否按指定謂詞(Predicate)劃分過

    partition

    将某個範圍劃分為兩組

    partition_copy

     C++11
    拷貝指定範圍的劃分結果

    partition_point

     C++11
    傳回被劃分範圍的劃分點

    stable_partition

    穩定劃分,兩組元素各維持相對順序
  • 排序操作

    由頭檔案 <algorithm> 定義。

    is_sorted

     C++11
    檢測指定範圍是否已排序

    is_sorted_until

     C++11
    傳回最大已排序子範圍

    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

    檢測給定範圍是否滿足堆結構

    is_heap_until

     C++11
    檢測給定範圍中滿足堆結構的最大子範圍

    make_heap

    用給定範圍構造出一個堆

    pop_heap

    從一個堆中删除最大的元素

    push_heap

    向堆中增加一個元素

    sort_heap

    将滿足堆結構的範圍排序
  • 最大/最小操作

    由頭檔案 <algorithm> 定義。

    is_permutation

     C++11
    判斷一個序列是否是另一個序列的一種排序

    lexicographical_compare

    比較兩個序列的字典序

    max

    傳回兩個元素中值最大的元素

    max_element

    傳回給定範圍中值最大的元素

    min

    傳回兩個元素中值最小的元素

    min_element

    傳回給定範圍中值最小的元素

    minmax 

    C++11
    傳回兩個元素中值最大及最小的元素

    minmax_element

     C++11
    傳回給定範圍中值最大及最小的元素

    next_permutation

    傳回給定範圍中的元素組成的下一個按字典序的排列

    prev_permutation

    傳回給定範圍中的元素組成的上一個按字典序的排列
  • 數值操作

    由頭檔案 <numeric> 定義。

    accumulate

    累加範圍中的元素

    adjacent_difference

    計算算輸出相鄰元素的內插補點

    inner_product

    計算兩個範圍的内積

    iota

     C++11
    用順序遞增的值指派指定範圍内的元素

    partial_sum

    部份求和
  • C 庫算法

    由頭檔案 <cstdlib> 定義。

    qsort

    快速(Quick)排序

    bsearch

    二分(Binary)查找
    • 大家可以到下面網址檢視每一個算法的詳細介紹及源碼例子展示!!
    • 文章出處: http://classfoo.com/ccby/article/tZTzs