STL中的所有算法(70個)

STL中的所有算法(70)


STL算法部分主要由頭文件<algorithm>,<numeric>,<functional>組成。

要使用STL中的算法函數必須包含頭文件<algorithm>,對於數值算法須包含<numeric><functional>中則定義了一些模板類,用來聲明函數對象。

 

-----------------------------------------------------------------------------------------------------
STL中算法大致分爲四類:

        1、非可變序列算法:指不直接修改其所操作的容器內容的算法。
        2、可變序列算法:指可以修改它們所操作的容器內容的算法。
        3、排序算法:    包括對序列進行排序和合並的算法、搜索算法以及有序序列上的集合操作。
        4、數值算法:    對容器內容進行數值計算。

------------------------------------------------------------------------------------------------

以下對所有算法進行細緻分類並標明功能:

   <>查找算法(13):判斷容器中是否包含某個值

    adjacent_find:          iterator對標識元素範圍內,查找一對相鄰重複元素,找到則返回指向                               這對元素的第一個元素的ForwardIterator。否則返回last。重載版本使用                               輸入的二元操作符代替相等的判斷。

    binary_search:          在有序序列中查找value,找到返回true。重載的版本實用指定的比較函數                               對象或函數指針來判斷相等。

    count:                  利用等於操作符,把標誌範圍內的元素與輸入值比較,返回相等元素個數。

    count_if:               利用輸入的操作符,對標誌範圍內的元素進行操作,返回結果爲true的個                               數。

    equal_range:            功能類似equal,返回一對iterator,第一個表示lower_bound,第二個表                               示upper_bound

    find:                   利用底層元素的等於操作符,對指定範圍內的元素與輸入值進行比較。當匹                               配時,結束搜索,返回該元素的一個InputIterator

    find_end:               在指定範圍內查找"由輸入的另外一對iterator標誌的第二個序列"的最後                               一次出現。找到則返回最後一對的第一個ForwardIterator,否則返回輸入                               的"另外一對"的第一個ForwardIterator。重載版本使用用戶輸入的操作符                               代替等於操作。

    find_first_of:          在指定範圍內查找"由輸入的另外一對iterator標誌的第二個序列"中任意                               一個元素的第一次出現。重載版本中使用了用戶自定義操作符。

    find_if:                使用輸入的函數代替等於操作符執行find

    lower_bound:            返回一個ForwardIterator,指向在有序序列範圍內的可以插入指定值而不                               破壞容器順序的第一個位置。重載函數使用自定義比較操作。

    upper_bound:            返回一個ForwardIterator,指向在有序序列範圍內插入value而不破壞容                               器順序的最後一個位置,該位置標誌一個大於value的值。重載函數使用自                               定義比較操作。

    search:                 給出兩個範圍,返回一個ForwardIterator,查找成功指向第一個範圍內第                               一次出現子序列(第二個範圍)的位置,查找失敗指向last1。重載版本使用                               自定義的比較操作。

    search_n:               在指定範圍內查找val出現n次的子序列。重載版本使用自定義的比較操                                 作。

------------------------------------------------------------------------------------------------

   <>排序和通用算法(14):提供元素排序策略

    inplace_merge:          合併兩個有序序列,結果序列覆蓋兩端範圍。重載版本使用輸入的操作進行                               排序。

    merge:                  合併兩個有序序列,存放到另一個序列。重載版本使用自定義的比較。

    nth_element:            將範圍內的序列重新排序,使所有小於第n個元素的元素都出現在它前面,                               而大於它的都出現在後面。重載版本使用自定義的比較操作。

    partial_sort:           對序列做部分排序,被排序元素個數正好可以被放到範圍內。重載版本使用                               自定義的比較操作。

    partial_sort_copy:      partial_sort類似,不過將經過排序的序列複製到另一個容器。

    partition:              對指定範圍內元素重新排序,使用輸入的函數,把結果爲true的元素放在                               結果爲false的元素之前。

    random_shuffle:         對指定範圍內的元素隨機調整次序。重載版本輸入一個隨機數產生操作。

    reverse:                將指定範圍內元素重新反序排序。

    reverse_copy:           reverse類似,不過將結果寫入另一個容器。

    rotate:                 將指定範圍內元素移到容器末尾,由middle指向的元素成爲容器第一個元                               素。

    rotate_copy:            rotate類似,不過將結果寫入另一個容器。

    sort:                   以升序重新排列指定範圍內的元素。重載版本使用自定義的比較操作。

    stable_sort:            sort類似,不過保留相等元素之間的順序關係。

    stable_partition:       partition類似,不過不保證保留容器中的相對順序。

------------------------------------------------------------------------------------------------

   <>刪除和替換算法(15)

    copy:                   複製序列

    copy_backward:          copy相同,不過元素是以相反順序被拷貝。

    iter_swap:              交換兩個ForwardIterator的值。

    remove:                 刪除指定範圍內所有等於指定元素的元素。注意,該函數不是真正刪除函                               數。內置函數不適合使用removeremove_if函數。

    remove_copy:            將所有不匹配元素複製到一個制定容器,返回OutputIterator指向被拷貝                               的末元素的下一個位置。

    remove_if:              刪除指定範圍內輸入操作結果爲true的所有元素。

    remove_copy_if:         將所有不匹配元素拷貝到一個指定容器。

    replace:                將指定範圍內所有等於vold的元素都用vnew代替。

    replace_copy:           replace類似,不過將結果寫入另一個容器。

    replace_if:             將指定範圍內所有操作結果爲true的元素用新值代替。

    replace_copy_if:        replace_if,不過將結果寫入另一個容器。

    swap:                   交換存儲在兩個對象中的值。

    swap_range:             將指定範圍內的元素與另一個序列元素值進行交換。

    unique:                 清除序列中重複元素,和remove類似,它也不能真正刪除元素。重載版本                               使用自定義比較操作。

    unique_copy:            unique類似,不過把結果輸出到另一個容器。

 

   <>排列組合算法(2):提供計算給定集合按一定順序的所有可能排列組合

    next_permutation:       取出當前範圍內的排列,並重新排序爲下一個排列。重載版本使用自定義的                               比較操作。

    prev_permutation:       取出指定範圍內的序列並將它重新排序爲上一個序列。如果不存在上一個序                               列則返回false。重載版本使用自定義的比較操作。

 

   <>算術算法(4)

    accumulate:             iterator對標識的序列段元素之和,加到一個由val指定的初始值上。重載                               版本不再做加法,而是傳進來的二元操作符被應用到元素上。

    partial_sum:            創建一個新序列,其中每個元素值代表指定範圍內該位置前所有元素之和。                               重載版本使用自定義操作代替加法。

    inner_product:          對兩個序列做內積(對應元素相乘,再求和)並將內積加到一個輸入的初始                               值上。重載版本使用用戶定義的操作。

    adjacent_difference:    創建一個新序列,新序列中每個新值代表當前元素與上一個元素的差。重載                               版本用指定二元操作計算相鄰元素的差。

 

   <>生成和異變算法(6)

    fill:                   將輸入值賦給標誌範圍內的所有元素。

    fill_n:                 將輸入值賦給firstfirst+n範圍內的所有元素。

    for_each:               用指定函數依次對指定範圍內所有元素進行迭代訪問,返回所指定的函數類                               型。該函數不得修改序列中的元素。

    generate:               連續調用輸入的函數來填充指定的範圍。

    generate_n:             generate函數類似,填充從指定iterator開始的n個元素。

    transform:              將輸入的操作作用與指定範圍內的每個元素,併產生一個新的序列。重載版                               本將操作作用在一對元素上,另外一個元素來自輸入的另外一個序列。結果                               輸出到指定容器。

 

   <>關係算法(8)
    equal:                  如果兩個序列在標誌範圍內元素都相等,返回true。重載版本使用輸入的                               操作符代替默認的等於操作符。

    includes:               判斷第一個指定範圍內的所有元素是否都被第二個範圍包含,使用底層元素                               的<操作符,成功返回true。重載版本使用用戶輸入的函數。

    lexicographical_compare:比較兩個序列。重載版本使用用戶自定義比較操作。

    max:                    返回兩個元素中較大一個。重載版本使用自定義比較操作。

    max_element:            返回一個ForwardIterator,指出序列中最大的元素。重載版本使用自定義                               比較操作。

    min:                    返回兩個元素中較小一個。重載版本使用自定義比較操作。

    min_element:            返回一個ForwardIterator,指出序列中最小的元素。重載版本使用自定義                               比較操作。

    mismatch:               並行比較兩個序列,指出第一個不匹配的位置,返回一對iterator,標誌                               第一個不匹配元素位置。如果都匹配,返回每個容器的last。重載版本使                               用自定義的比較操作。

 

   <>集合算法(4)

    set_union:              構造一個有序序列,包含兩個序列中所有的不重複元素。重載版本使用自定                               義的比較操作。

    set_intersection:       構造一個有序序列,其中元素在兩個序列中都存在。重載版本使用自定義的                               比較操作。

    set_difference:         構造一個有序序列,該序列僅保留第一個序列中存在的而第二個中不存在的                               元素。重載版本使用自定義的比較操作。

    set_symmetric_difference:構造一個有序序列,該序列取兩個序列的對稱差集(並集-交集)
 
   <>堆算法(4)

    make_heap:            把指定範圍內的元素生成一個堆。重載版本使用自定義比較操作。

    pop_heap:             並不真正把最大元素從堆中彈出,而是重新排序堆。它把firstlast-1交                               換,然後重新生成一個堆。可使用容器的back來訪問被"彈出"的元素或者                               使用pop_back進行真正的刪除。重載版本使用自定義的比較操作。

    push_heap:            假設firstlast-1是一個有效堆,要被加入到堆的元素存放在位置last-                               1,重新生成堆。在指向該函數前,必須先把元素插入容器後。重載版本使                               用指定的比較操作。

    sort_heap:            對指定範圍內的序列重新排序,它假設該序列是個有序堆。重載版本使用自                               定義比較操作。

 

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