1. 程式人生 > >STL所有演算法

STL所有演算法

 

    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:                   刪除指定範圍內所有等於指定元素的元素。注意,該函式不是真正刪除函式。內建函式不適合使用remove和remove_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:                   將輸入值賦給first到first+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:                 並不真正把最大元素從堆中彈出,而是重新排序堆。它把first和last-1交換,然後重新生成一個堆。可使用容器的back來訪問被”彈出”的元素或者使用pop_back進行真正的刪除。過載版本使用自定義的比較操作。
    push_heap:                假設first到last-1是一個有效堆,要被加入到堆的元素存放在位置last-1,重新生成堆。在指向該函式前,必須先把元素插入容器後。過載版本使用指定的比較操作。
    sort_heap:                對指定範圍內的序列重新排序,它假設該序列是個有序堆。過載版本使用自定義比較操作。

 

轉載自:http://blog.csdn.net/nash635/archive/2010/04/10/5470572.aspx

 

 

補充:


一、函式物件: 因為很多的演算法中多使用了函式物件


二元函式物件,V1和V2為輸入,V3為結果

plus<T>:
  transform(V1.begin(), V1.end(), V2.begin(), V3.begin(),plus<double>());

其他的二元函式物件:minus,multiples,divieds,modulus.

二元斷言函式物件,使用時需要bind2nd()或bind1st()來繫結比較物件。

less<T>:
  find_if(L.begin(), L.end(), bind2nd(less<int>(), 0));

其他的二元斷言函式:equal_to,notequal_to,greater,greater_equal,less_equal,logical_and,logical_or

二元邏輯函式

binary_negate:
const char* wptr = find_if(str, str + MAXLEN,
                           compose2(not2(logical_or<bool>()),
                                    bind2nd(equal_to<char>(), ’ ‘),
                                    bind2nd(equal_to<char>(), ‘/n’)));

一元函式物件

negate:
transform(V1.begin(), V1.end(), V2.begin(),
          negate<int>());

一元斷定函式物件

logical_not:
  transform(V.begin(), V.end(), V.begin(), logical_not<bool>());

一元邏輯函式

unary_negate:


二、函式物件發生器:主要用來填充序列

產生不重複的隨機數:
// Generate unique random numbers from 0 to mod:
class URandGen {
  std::set<int> used;
  int limit;
public:
  URandGen(int lim) : limit(lim) {
    srand(time(0));
  }
  int operator()() {
    while(true) {
      int i = int(rand()) % limit;
      if(used.find(i) == used.end()) {
        used.insert(i);
        return i;
      }
    }
  }
};

const int sz = 10;
const int max = 50;
vector<int> x(sz), y(sz), r(sz);
//An integer random number generator:
URandGen urg(max);
generate_n(x.begin(), sz, urg);

 

三、函式物件介面卡 : 將函式轉化為函式物件

 

ptr_fun:一般函式介面卡

一元例項:
transform(first, last, first,
          compose1(negate<double>, ptr_fun(fabs)));

二元例項:
list<char*>::iterator item = 
              find_if(L.begin(), L.end(),
                      not1(binder2nd(ptr_fun(strcmp), “OK”)));

not1:對一元的斷定函式物件取反的介面卡。

not2: 對二元的斷定函式物件取反的介面卡。

mem_fun與mem_fun_ref:類成員函式的介面卡,區別是一個需要指標,而另一個僅需要一般物件。如下:
shape是一個指標變數,則foreach(v.begin(),v.end(),mem_fun(&shape::draw));
但如果shape是一般的變數,不是指標,則foreach(v.begin(),v.end(),mem_fun_ref(&shape::draw));

 

四、演算法

 

拷貝:
copy()
reverse_copy()
rotate_copy()
remove_copy()  拷貝不等於某值的元素到另一個序列。
remove_copy_if() 拷貝符合條件的到另一個序列。

填充和生成:
fill()
fill_n() 填充序列中的n個元素。
generate()為序列中的每個元素呼叫gen()函式。

排列:
next_permuttion() 後一個排列。
prev_permutation()

partition() 劃分,將滿足條件的元素移動到序列的前面。
stable_partition()

查詢和替換:
find()
binary_search() 在一個已經有順序的序列上查詢。
find_if()
search() 檢查第二個序列是否在第一個序列中出現,且順序相同。

刪除:注意必須呼叫erase()來真正刪除
remove()
unique()刪除相鄰重複元素,最好現排序。

合併序列:
merge()

數值演算法:
accumulate() 對序列的每個元素進行運算後求和。
transform() 也可以對每個元素進行運算。
計數:
size()總個數。
count()等於某值的元素個數。

adjacent_difference 序列中的後一個減前與他相鄰的前一個得到新的序列。

adiacent_find

 

五、所有的演算法

     

accumlate  iterator 對標誌的序列中的元素之和,加到一個由 init 指定的初始值上。過載的版本不再做加法,而是傳進來的二元操作符被應用到元素上。 
adjacent_different 
:建立一個新序列,該序列的每個新值都代表了當前元素與上一個元素的差。過載版本用指定的二元操作計算相鄰元素的差。 
adjacent_find 
:在 iterator 對標誌的元素範圍內,查詢一對相鄰的重複元素,如果找到返回一個 ForwardIterator ,指向這對元素的第一個元素。否則返回 last 。過載版本使用輸入的二元操作符代替相等的判斷。 
binary_search 
:在有序序列中查詢 value ,如果找到返回 true 。過載的版本使用指定的比較函式物件或者函式指標來判斷相等。 
copy 
:複製序列。 
copy_backward 
:除了元素以相反的順序被拷貝外,別的和 copy 相同。 
count 
:利用等於操作符,把標誌範圍類的元素與輸入的值進行比較,並返回相等元素的個數。 
count_if 
:對於標誌範圍類的元素,應用輸入的操作符,並返回結果為 true 的次數。 
equal 
:如果兩個序列在範圍內的元素都相等,則 equal 返回 true 。過載版本使用輸入的操作符代替了預設的等於操作符。 
equal_range 
:返回一對 iterator ,第一個 iterator 表示由 lower_bound 返回的 iterator ,第二個表示由 upper_bound 返回的iterator 值。 
fill 
:將輸入的值的拷貝賦給範圍內的每個元素。 
fill_n 
:將輸入的值賦值給 first  frist+n 範圍內的元素。 
find 
:利用底層元素的等於操作符,對範圍內的元素與輸入的值進行比較。當匹配時,結束搜尋,返回該元素的一個 InputIterator 
find_if 
:使用輸入的函式替代了等於操作符執行了 find  
find_end 
:在範圍內查詢“由輸入的另外一個 iterator 對標誌的第二個序列”的最後一次出現。過載版本中使用了使用者輸入的操作符替代等於操作。 
find_first_of 
:在範圍內查詢“由輸入的另外一個 iterator 對標誌的第二個序列”中的任意一個元素的第一次出現。過載版本中使用了使用者自定義的操作符。 
for_each 
:依次對範圍內的所有元素執行輸入的函式。 
generate 
:通過對輸入的函式 gen 的連續呼叫來填充指定的範圍。 
generate_n 
:填充 n 個元素。 
includes 
:判斷 [first1, last1) 的一個元素是否被包含在另外一個序列中。使用底層元素的 <= 操作符,過載版本使用使用者輸入的函式。 
inner_product 
:對兩個序列做內積 ( 對應的元素相乘,再求和 ) ,並將內積加到一個輸入的的初始值上。過載版本使用了使用者定義的操作。 
inner_merge 
:合併兩個排過序的連續序列,結果序列覆蓋了兩端範圍,過載版本使用輸入的操作進行排序。 
iter_swap 
:交換兩個 ForwardIterator 的值。 
lexicographical_compare 
:比較兩個序列。過載版本使用了使用者自定義的比較操作。 
lower_bound 
:返回一個 iterator ,它指向在範圍內的有序序列中可以插入指定值而不破壞容器順序的第一個位置。過載函式使用了自定義的比較操作。 
max 
:返回兩個元素中的較大的一個,過載版本使用了自定義的比較操作。 
max_element 
:返回一個 iterator ,指出序列中最大的元素。過載版本使用自定義的比較操作。 
min 
:兩個元素中的較小者。過載版本使用自定義的比較操作。 
min_element 
:類似與 max_element ,不過返回最小的元素。 
merge 
:合併兩個有序序列,並存放到另外一個序列中。過載版本使用自定義的比較。 
mismatch 
:並行的比較兩個序列,指出第一個不匹配的位置,它返回一對 iterator ,標誌第一個不匹配的元素位置。如果都匹配,返回每個容器的 last 。過載版本使用自定義的比較操作。 
next_permutation 
:取出當前範圍內的排列,並將其重新排序為下一個排列。過載版本使用自定義的比較操作。 
nth_element 
:將範圍內的序列重新排序,使所有小於第 n 個元素的元素都出現在它前面,而大於它的都出現在後面,過載版本使用了自定義的比較操作。 
partial_sort 
:對整個序列做部分排序,被排序元素的個數正好可以被放到範圍內。過載版本使用自定義的比較操作。 
partial_sort_copy 
:與 partial_sort 相同,除了將經過排序的序列複製到另外一個容器。 
partial_sum 
:建立一個新的元素序列,其中每個元素的值代表了範圍內該位置之前所有元素之和。過載版本使用了自定義操作替代加法。 
partition 
:對範圍內元素重新排序,使用輸入的函式,把計算結果為 true 的元素都放在結果為 false 的元素之前。 
prev_permutation 
:取出範圍內的序列並將它重新排序為上一個序列。如果不存在上一個序列則返回 false 。過載版本使用自定義的比較操作。 
random_shuffle 
:對範圍內的元素隨機調整次序。過載版本輸入一個隨機數產生操作。 
remove 
:刪除在範圍內的所有等於指定的元素,注意,該函式並不真正刪除元素。內建陣列不適合使用 remove  remove_if 函式。 
remove_copy 
:將所有不匹配的元素都複製到一個指定容器,返回的 OutputIterator 指向被拷貝的末元素的下一個位置。 
remove_if 
:刪除所有範圍內輸入操作結果為 true 的元素。 
remove_copy_if 
:將所有不匹配的元素拷貝到一個指定容器。 
replace 
:將範圍內的所有等於 old_value 的元素都用 new_value 替代。 
replace_copy 
:與 replace 類似,不過將結果寫入另外一個容器。 
replace_if 
:將範圍內的所有操作結果為 true 的元素用新值替代。 
replace_copy_if 
:類似與 replace_if ,不過將結果寫入另外一個容器。 
reverse 
:將範圍內元素重新按反序排列。 
reverse_copy 
:類似與 reverse ,不過將結果寫入另外一個容器。 
rotate 
:將範圍內的元素移到容器末尾,由 middle 指向的元素成為容器第一個元素。 
rotate_copy 
:類似與 rotate ,不過將結果寫入另外一個容器。 
search 
:給出了兩個範圍,返回一個 iterator ,指向在範圍內第一次出現子序列的位置。過載版本使用自定義的比較操作。 
search_n 
:在範圍內查詢 value 出現 n 次的子序列。過載版本使用自定義的比較操作。 
set_difference 
:構造一個排過序的序列,其中的元素出現在第一個序列中,但是不包含在第二個序列中。過載版本使用自定義的比較操作。 
set_intersection 
:構造一個排過序的序列,其中的元素在兩個序列中都存在。過載版本使用自定義的比較操作。 
set_symmetric_difference 
:構造一個排過序的序列,其中的元素在第一個序列中出現,但是不出現在第二個序列中。過載版本使用自定義的比較操作。 
set_union 
:構造一個排過序的序列,它包含兩個序列中的所有的不重複元素。過載版本使用自定義的比較操作。 
sort 
:以升序重新排列範圍內的元素,過載版本使用了自定義的比較操作。 
stable_partition 
:與 partition 類似,不過它不保證保留容器中的相對順序。 
stable_sort 
:類似與 sort ,不過保留相等元素之間的順序關係。 
swap 
:交換儲存在兩個物件中的值。 
swap_range 
:將在範圍內的元素與另外一個序列的元素值進行交換。 
transform 
:將輸入的操作作用在範圍內的每個元素上,併產生一個新的序列。過載版本將操作作用在一對元素上,另外一個元素來自輸入的另外一個序列。結果輸出到指定的容器。 
unique 
:清除序列中重複的元素,和 remove 類似,它也不能真正的刪除元素。過載版本使用了自定義的操作。 
unique_copy 
:類似與 unique ,不過它把結果輸出到另外一個容器。 
upper_bound 
:返回一個 iterator ,它指向在範圍內的有序序列中插入 value 而不破壞容器順序的最後一個位置,該位置標誌了一個大於 value 的值。過載版本使用了輸入的比較操作。 
堆演算法: C++ 標準庫提供的是 max-heap 。一共由以下 4 個泛型堆演算法。 
make_heap 
:把範圍內的元素生成一個堆。過載版本使用自定義的比較操作。 
pop_heap 
:並不是真正的把最大元素從堆中彈出,而是重新排序堆。它把 first  last-1 交換,然後重新做成一個堆。可以使用容器的 back 來訪問被“彈出“的元素或者使用 pop_back 來真正的刪除。過載版本使用自定義的比較操作。 
push_heap 
:假設 first  last-1 是一個有效的堆,要被加入堆的元素在位置 last-1 ,重新生成堆。在指向該函式前,必須先把元素插入容器後。過載版本使用指定的比較。 
sort_heap 
:對範圍內的序列重新排序,它假設該序列是個有序的堆。過載版本使用自定義的比較操作。


 


 

    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:                   刪除指定範圍內所有等於指定元素的元素。注意,該函式不是真正刪除函式。內建函式不適合使用remove和remove_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:                   將輸入值賦給first到first+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:                 並不真正把最大元素從堆中彈出,而是重新排序堆。它把first和last-1交換,然後重新生成一個堆。可使用容器的back來訪問被”彈出”的元素或者使用pop_back進行真正的刪除。過載版本使用自定義的比較操作。
    push_heap:                假設first到last-1是一個有效堆,要被加入到堆的元素存放在位置last-1,重新生成堆。在指向該函式前,必須先把元素插入容器後。過載版本使用指定的比較操作。
    sort_heap:                對指定範圍內的序列重新排序,它假設該序列是個有序堆。過載版本使用自定義比較操作。

 

轉載自:http://blog.csdn.net/nash635/archive/2010/04/10/5470572.aspx

 

 

補充:


一、函式物件: 因為很多的演算法中多使用了函式物件


二元函式物件,V1和V2為輸入,V3為結果

plus<T>:
  transform(V1.begin(), V1.end(), V2.begin(), V3.begin(),plus<double>());

其他的二元函式物件:minus,multiples,divieds,modulus.

二元斷言函式物件,使用時需要bind2nd()或bind1st()來繫結比較物件。

less<T>:
  find_if(L.begin(), L.end(), bind2nd(less<int>(), 0));

其他的二元斷言函式:equal_to,notequal_to,greater,greater_equal,less_equal,logical_and,logical_or

二元邏輯函式

binary_negate:
const char* wptr = find_if(str, str + MAXLEN,
                           compose2(not2(logical_or<bool>()),
                                    bind2nd(equal_to<char>(), ’ ‘),
                                    bind2nd(equal_to<char>(), ‘/n’)));

一元函式物件

negate:
transform(V1.begin(), V1.end(), V2.begin(),
          negate<int>());

一元斷定函式物件