教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

C++ 培訓(xùn)之C++STL 一般總結(jié)(二)

更新時間:2016年08月26日16時44分 來源:傳智播客C++培訓(xùn)學(xué)院 瀏覽次數(shù):

 3.STL算法
STL算法部分主要由頭文件<algorithm>,<numeric>,<functional>組成。要使用 STL中的算法函數(shù)必須包含頭文件<algorithm>,對于數(shù)值算法須包含<numeric>,<functional>中則定義了一些模板類,用來聲明函數(shù)對象。
STL中算法大致分為四類:
1)、非可變序列算法:指不直接修改其所操作的容器內(nèi)容的算法。
2)、可變序列算法:指可以修改它們所操作的容器內(nèi)容的算法。
3)、排序算法:包括對序列進(jìn)行排序和合并的算法、搜索算法以及有序序列上的集合操作。
4)、數(shù)值算法:對容器內(nèi)容進(jìn)行數(shù)值計算。
 
以下對所有算法進(jìn)行細(xì)致分類并標(biāo)明功能:
<一>查找算法(13個):判斷容器中是否包含某個值
    adjacent_find: 在iterator對標(biāo)識元素范圍內(nèi),查找一對相鄰重復(fù)元素,找到則返回指向這對元素的第一個元素的ForwardIterator。否則返回last。重載版本使用輸入的二元操作符代替相等的判斷。
    binary_search: 在有序序列中查找value,找到返回true。重載的版本實用指定的比較函數(shù)對象或函數(shù)指針來判斷相等。
    count: 利用等于操作符,把標(biāo)志范圍內(nèi)的元素與輸入值比較,返回相等元素個數(shù)。
    count_if: 利用輸入的操作符,對標(biāo)志范圍內(nèi)的元素進(jìn)行操作,返回結(jié)果為true的個數(shù)。
    equal_range: 功能類似equal,返回一對iterator,第一個表示lower_bound,第二個表示upper_bound。
    find: 利用底層元素的等于操作符,對指定范圍內(nèi)的元素與輸入值進(jìn)行比較。當(dāng)匹配時,結(jié)束搜索,返回該元素的一個InputIterator。
    find_end: 在指定范圍內(nèi)查找"由輸入的另外一對iterator標(biāo)志的第二個序列"的最后一次出現(xiàn)。找到則返回最后一對的第一個ForwardIterator,否則返回輸入的"另外一對"的第一個ForwardIterator。重載版本使用用戶輸入的操作符代替等于操作。
    find_first_of: 在指定范圍內(nèi)查找"由輸入的另外一對iterator標(biāo)志的第二個序列"中任意一個元素的第一次出現(xiàn)。重載版本中使用了用戶自定義操作符。
    find_if: 使用輸入的函數(shù)代替等于操作符執(zhí)行find。
    lower_bound: 返回一個ForwardIterator,指向在有序序列范圍內(nèi)的可以插入指定值而不破壞容器順序的第一個位置。重載函數(shù)使用自定義比較操作。
    upper_bound: 返回一個ForwardIterator,指向在有序序列范圍內(nèi)插入value而不破壞容器順序的最后一個位置,該位置標(biāo)志一個大于value的值。重載函數(shù)使用自定義比較操作。
    search: 給出兩個范圍,返回一個ForwardIterator,查找成功指向第一個范圍內(nèi)第一次出現(xiàn)子序列(第二個范圍)的位置,查找失敗指向last1。重載版本使用自定義的比較操作。
    search_n: 在指定范圍內(nèi)查找val出現(xiàn)n次的子序列。重載版本使用自定義的比較操作。
 
<二>排序和通用算法(14個):提供元素排序策略
    inplace_merge: 合并兩個有序序列,結(jié)果序列覆蓋兩端范圍。重載版本使用輸入的操作進(jìn)行排序。
    merge: 合并兩個有序序列,存放到另一個序列。重載版本使用自定義的比較。
    nth_element: 將范圍內(nèi)的序列重新排序,使所有小于第n個元素的元素都出現(xiàn)在它前面,而大于它的都出現(xiàn)在后面。重載版本使用自定義的比較操作。
    partial_sort: 對序列做部分排序,被排序元素個數(shù)正好可以被放到范圍內(nèi)。重載版本使用自定義的比較操作。
    partial_sort_copy: 與partial_sort類似,不過將經(jīng)過排序的序列復(fù)制到另一個容器。
    partition: 對指定范圍內(nèi)元素重新排序,使用輸入的函數(shù),把結(jié)果為true的元素放在結(jié)果為false的元素之前。
    random_shuffle: 對指定范圍內(nèi)的元素隨機(jī)調(diào)整次序。重載版本輸入一個隨機(jī)數(shù)產(chǎn)生操作。
    reverse: 將指定范圍內(nèi)元素重新反序排序。
    reverse_copy: 與reverse類似,不過將結(jié)果寫入另一個容器。
    rotate: 將指定范圍內(nèi)元素移到容器末尾,由middle指向的元素成為容器第一個元素。
    rotate_copy: 與rotate類似,不過將結(jié)果寫入另一個容器。
    sort: 以升序重新排列指定范圍內(nèi)的元素。重載版本使用自定義的比較操作。
    stable_sort: 與sort類似,不過保留相等元素之間的順序關(guān)系。
    stable_partition: 與partition類似,不過不保證保留容器中的相對順序。
 
<三>刪除和替換算法(15個)
    copy: 復(fù)制序列
    copy_backward: 與copy相同,不過元素是以相反順序被拷貝。
    iter_swap: 交換兩個ForwardIterator的值。
    remove: 刪除指定范圍內(nèi)所有等于指定元素的元素。注意,該函數(shù)不是真正刪除函數(shù)。內(nèi)置函數(shù)不適合使用remove和remove_if函數(shù)。
    remove_copy: 將所有不匹配元素復(fù)制到一個制定容器,返回OutputIterator指向被拷貝的末元素的下一個位置。
    remove_if: 刪除指定范圍內(nèi)輸入操作結(jié)果為true的所有元素。
    remove_copy_if: 將所有不匹配元素拷貝到一個指定容器。
    replace: 將指定范圍內(nèi)所有等于vold的元素都用vnew代替。
    replace_copy: 與replace類似,不過將結(jié)果寫入另一個容器。
    replace_if: 將指定范圍內(nèi)所有操作結(jié)果為true的元素用新值代替。
    replace_copy_if: 與replace_if,不過將結(jié)果寫入另一個容器。
    swap: 交換存儲在兩個對象中的值。
    swap_range: 將指定范圍內(nèi)的元素與另一個序列元素值進(jìn)行交換。
    unique: 清除序列中重復(fù)元素,和remove類似,它也不能真正刪除元素。重載版本使用自定義比較操作。
    unique_copy: 與unique類似,不過把結(jié)果輸出到另一個容器。
 
<四>排列組合算法(2個):提供計算給定集合按一定順序的所有可能排列組合
    next_permutation: 取出當(dāng)前范圍內(nèi)的排列,并重新排序為下一個排列。重載版本使用自定義的比較操作。
    prev_permutation: 取出指定范圍內(nèi)的序列并將它重新排序為上一個序列。如果不存在上一個序列則返回false。重載版本使用自定義的比較操作。
 
<五>算術(shù)算法(4個)
    accumulate: iterator對標(biāo)識的序列段元素之和,加到一個由val指定的初始值上。重載版本不再做加法,而是傳進(jìn)來的二元操作符被應(yīng)用到元素上。
    partial_sum: 創(chuàng)建一個新序列,其中每個元素值代表指定范圍內(nèi)該位置前所有元素之和。重載版本使用自定義操作代替加法。
    inner_product: 對兩個序列做內(nèi)積(對應(yīng)元素相乘,再求和)并將內(nèi)積加到一個輸入的初始值上。重載版本使用用戶定義的操作。
    adjacent_difference: 創(chuàng)建一個新序列,新序列中每個新值代表當(dāng)前元素與上一個元素的差。重載版本用指定二元操作計算相鄰元素的差。
 
<六>生成和異變算法(6個)
    fill: 將輸入值賦給標(biāo)志范圍內(nèi)的所有元素。
    fill_n: 將輸入值賦給first到first+n范圍內(nèi)的所有元素。
    for_each: 用指定函數(shù)依次對指定范圍內(nèi)所有元素進(jìn)行迭代訪問,返回所指定的函數(shù)類型。該函數(shù)不得修改序列中的元素。
    generate: 連續(xù)調(diào)用輸入的函數(shù)來填充指定的范圍。
    generate_n: 與generate函數(shù)類似,填充從指定iterator開始的n個元素。
    transform: 將輸入的操作作用與指定范圍內(nèi)的每個元素,并產(chǎn)生一個新的序列。重載版本將操作作用在一對元素上,另外一個元素來自輸入的另外一個序列。結(jié)果輸出到指定容器。
 
<七>關(guān)系算法(8個)
    equal: 如果兩個序列在標(biāo)志范圍內(nèi)元素都相等,返回true。重載版本使用輸入的操作符代替默認(rèn)的等于操作符。
    includes: 判斷第一個指定范圍內(nèi)的所有元素是否都被第二個范圍包含,使用底層元素的<操作符,成功返回true。重載版本使用用戶輸入的函數(shù)。
    lexicographical_compare: 比較兩個序列。重載版本使用用戶自定義比較操作。
    max: 返回兩個元素中較大一個。重載版本使用自定義比較操作。
    max_element: 返回一個ForwardIterator,指出序列中最大的元素。重載版本使用自定義比較操作。
    min: 返回兩個元素中較小一個。重載版本使用自定義比較操作。
    min_element: 返回一個ForwardIterator,指出序列中最小的元素。重載版本使用自定義比較操作。
    mismatch: 并行比較兩個序列,指出第一個不匹配的位置,返回一對iterator,標(biāo)志第一個不匹配元素位置。如果都匹配,返回每個容器的last。重載版本使用自定義的比較操作。
<八>集合算法(4個)
    set_union: 構(gòu)造一個有序序列,包含兩個序列中所有的不重復(fù)元素。重載版本使用自定義的比較操作。
    set_intersection: 構(gòu)造一個有序序列,其中元素在兩個序列中都存在。重載版本使用自定義的比較操作。
    set_difference: 構(gòu)造一個有序序列,該序列僅保留第一個序列中存在的而第二個中不存在的元素。重載版本使用自定義的比較操作。
    set_symmetric_difference: 構(gòu)造一個有序序列,該序列取兩個序列的對稱差集(并集-交集)。
 
<九>堆算法(4個)
    make_heap: 把指定范圍內(nèi)的元素生成一個堆。重載版本使用自定義比較操作。
    pop_heap: 并不真正把最大元素從堆中彈出,而是重新排序堆。它把first和last-1交換,然后重新生成一個堆??墒褂萌萜鞯腷ack來訪問被"彈出"的元素或者使用pop_back進(jìn)行真正的刪除。重載版本使用自定義的比較操作。
    push_heap: 假設(shè)first到last-1是一個有效堆,要被加入到堆的元素存放在位置last-1,重新生成堆。在指向該函數(shù)前,必須先把元素插入容器后。重載版本使用指定的比較操作。
    sort_heap: 對指定范圍內(nèi)的序列重新排序,它假設(shè)該序列是個有序堆。重載版本使用自定義比較操作。

 本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/c/ 
0 分享到:
和我們在線交談!