成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

初探STL之算法

nanfeiyan / 1978人閱讀

摘要:算法部分主要由頭文件組成。數(shù)值算法對(duì)容器內(nèi)容進(jìn)行數(shù)值計(jì)算。在指定范圍內(nèi)查找由輸入的另外一對(duì)標(biāo)志的第二個(gè)序列的最后一次出現(xiàn)。重載函數(shù)使用自定義比較操作。刪除指定范圍內(nèi)所有等于指定元素的元素。返回,指出序列中最小的元素。

STL算法部分主要由頭文件,,組成。要使用 STL中的算法函數(shù)必須包含頭文件,對(duì)于數(shù)值算法須包含,中則定義了一些模板類(lèi),用來(lái)聲明函數(shù)對(duì)象。

分類(lèi)

STL中算法大致分為四類(lèi):
1、非可變序列算法:指不直接修改其所操作的容器內(nèi)容的算法。
2、可變序列算法:指可以修改它們所操作的容器內(nèi)容的算法。
3、排序算法:包括對(duì)序列進(jìn)行排序和合并的算法、搜索算法以及有序序列上的集合操作。
4、數(shù)值算法:對(duì)容器內(nèi)容進(jìn)行數(shù)值計(jì)算。

以下對(duì)所有算法進(jìn)行細(xì)致分類(lèi)并標(biāo)明功能:

算法介紹

查找算法

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

adjacent_find: 在iterator對(duì)標(biāo)識(shí)元素范圍內(nèi),查找一對(duì)相鄰重復(fù)元素,找到則返回指向這對(duì)元素的第一個(gè)元素的

ForwardIterator。否則返回last。重載版本使用輸入的二元操作符代替相等的判斷。

binary_search: 在有序序列中查找value,找到返回true。重載的版本實(shí)用指定的比較函數(shù)對(duì)象或函數(shù)指針來(lái)判斷

相等。

count: 利用等于操作符,把標(biāo)志范圍內(nèi)的元素與輸入值比較,返回相等元素個(gè)數(shù)。
count_if: 利用輸入的操作符,對(duì)標(biāo)志范圍內(nèi)的元素進(jìn)行操作,返回結(jié)果為true的個(gè)數(shù)。


equal_range: 功能類(lèi)似equal,返回一對(duì)iterator,第一個(gè)表示lower_bound,第二個(gè)表示upper_bound。


find: 利用底層元素的等于操作符,對(duì)指定范圍內(nèi)的元素與輸入值進(jìn)行比較。當(dāng)匹配時(shí),結(jié)束搜索,返回該元素的一個(gè)InputIterator。
find_end: 在指定范圍內(nèi)查找"由輸入的另外一對(duì)iterator標(biāo)志的第二個(gè)序列"的最后一次出現(xiàn)。找到則返回最后一對(duì)的第一個(gè)ForwardIterator,否則返回輸入的"另外一對(duì)"的第一個(gè)ForwardIterator。重載版本使用用戶輸入的操作符代替等于操作。
find_first_of: 在指定范圍內(nèi)查找"由輸入的另外一對(duì)iterator標(biāo)志的第二個(gè)序列"中任意一個(gè)元素的第一次出現(xiàn)。重載版本中使用了用戶自定義操作符。
find_if: 使用輸入的函數(shù)代替等于操作符執(zhí)行find。


lower_bound: 返回一個(gè)ForwardIterator,指向在有序序列范圍內(nèi)的可以插入指定值而不破壞容器順序的第一個(gè)位置。重載函數(shù)使用自定義比較操作。
upper_bound: 返回一個(gè)ForwardIterator,指向在有序序列范圍內(nèi)插入value而不破壞容器順序的最后一個(gè)位置,該位置標(biāo)志一個(gè)大于value的值。重載函數(shù)使用自定義比較操作。
search: 給出兩個(gè)范圍,返回一個(gè)ForwardIterator,查找成功指向第一個(gè)范圍內(nèi)第一次出現(xiàn)子序列(第二個(gè)范圍)的位置,查找失敗指向last1。重載版本使用自定義的比較操作。


search_n:在指定范圍內(nèi)查找val出現(xiàn)n次的子序列。重載版本使用自定義的比較操作。

排序和通用算法

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

inplace_merge:  合并兩個(gè)有序序列,結(jié)果序列覆蓋兩端范圍。重載版本使用輸入的操作進(jìn)行排序。
merge:合并兩個(gè)有序序列,存放到另一個(gè)序列。重載版本使用自定義的比較。


nth_element:              將范圍內(nèi)的序列重新排序,使所有小于第n個(gè)元素的元素都出現(xiàn)在它前面,而大于它的都出現(xiàn)在后面。重載版本使用自定義的比較操作。


partial_sort:對(duì)序列做部分排序,被排序元素個(gè)數(shù)正好可以被放到范圍內(nèi)。重載版本使用自定義的比較操作。
partial_sort_copy: 與partial_sort類(lèi)似,不過(guò)將經(jīng)過(guò)排序的序列復(fù)制到另一個(gè)容器。
partition: 對(duì)指定范圍內(nèi)元素重新排序,使用輸入的函數(shù),把結(jié)果為true的元素放在結(jié)果為false的元素之前。


random_shuffle: 對(duì)指定范圍內(nèi)的元素隨機(jī)調(diào)整次序。重載版本輸入一個(gè)隨機(jī)數(shù)產(chǎn)生操作。


reverse: 將指定范圍內(nèi)元素重新反序排序。
reverse_copy:  與reverse類(lèi)似,不過(guò)將結(jié)果寫(xiě)入另一個(gè)容器。


rotate: 將指定范圍內(nèi)元素移到容器末尾,由middle指向的元素成為容器第一個(gè)元素。
rotate_copy: 與rotate類(lèi)似,不過(guò)將結(jié)果寫(xiě)入另一個(gè)容器。


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


stable_sort:  與sort類(lèi)似,不過(guò)保留相等元素之間的順序關(guān)系。
stable_partition: 與partition類(lèi)似,不過(guò)不保證保留容器中的相對(duì)順序。

刪除和替換算法

<三>刪除和替換算法(15個(gè))
copy: 復(fù)制序列
copy_backward: 與copy相同,不過(guò)元素是以相反順序被拷貝。

iter_swap: 交換兩個(gè)ForwardIterator的值。


remove: 刪除指定范圍內(nèi)所有等于指定元素的元素。注意,該函數(shù)不是真正刪除函數(shù)。內(nèi)置函數(shù)不適合使用remove和remove_if函數(shù)。
remove_copy:將所有不匹配元素復(fù)制到一個(gè)制定容器,返回OutputIterator指向被拷貝的末元素的下一個(gè)位置。
remove_if:  刪除指定范圍內(nèi)輸入操作結(jié)果為true的所有元素。
remove_copy_if:  將所有不匹配元素拷貝到一個(gè)指定容器。


replace:  將指定范圍內(nèi)所有等于vold的元素都用vnew代替。
replace_copy:  與replace類(lèi)似,不過(guò)將結(jié)果寫(xiě)入另一個(gè)容器。
replace_if: 將指定范圍內(nèi)所有操作結(jié)果為true的元素用新值代替。
replace_copy_if: 與replace_if,不過(guò)將結(jié)果寫(xiě)入另一個(gè)容器。


swap:   交換存儲(chǔ)在兩個(gè)對(duì)象中的值。
swap_range:   將指定范圍內(nèi)的元素與另一個(gè)序列元素值進(jìn)行交換。


unique:  清除序列中重復(fù)元素,和remove類(lèi)似,它也不能真正刪除元素。重載版本使用自定義比較操作。
unique_copy:  與unique類(lèi)似,不過(guò)把結(jié)果輸出到另一個(gè)容器。

排列組合算法

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

next_permutation: 取出當(dāng)前范圍內(nèi)的排列,并重新排序?yàn)橄乱粋€(gè)排列。重載版本使用自定義的比較操作。
prev_permutation:取出指定范圍內(nèi)的序列并將它重新排序?yàn)樯弦粋€(gè)序列。如果不存在上一個(gè)序列則返回false。重載版本使用自定義的比較操作。

算術(shù)算法

<五>算術(shù)算法(4個(gè))

accumulate:  iterator對(duì)標(biāo)識(shí)的序列段元素之和,加到一個(gè)由val指定的初始值上。重載版本不再做加法,而是傳進(jìn)來(lái)的二元操作符被應(yīng)用到元素上。
partial_sum:  創(chuàng)建一個(gè)新序列,其中每個(gè)元素值代表指定范圍內(nèi)該位置前所有元素之和。重載版本使用自定義操作代替加法。
inner_product:對(duì)兩個(gè)序列做內(nèi)積(對(duì)應(yīng)元素相乘,再求和)并將內(nèi)積加到一個(gè)輸入的初始值上。重載版本使用用戶定義的操作。
adjacent_difference:   創(chuàng)建一個(gè)新序列,新序列中每個(gè)新值代表當(dāng)前元素與上一個(gè)元素的差。重載版本用指定二元操作計(jì)算相鄰元素的差。

生成和異變算法

<六>生成和異變算法(6個(gè))

fill:    將輸入值賦給標(biāo)志范圍內(nèi)的所有元素。
fill_n:    將輸入值賦給first到first+n范圍內(nèi)的所有元素。
for_each:  用指定函數(shù)依次對(duì)指定范圍內(nèi)所有元素進(jìn)行迭代訪問(wèn),返回所指定的函數(shù)類(lèi)型。該函數(shù)不得修改序列中的元素。


generate:  連續(xù)調(diào)用輸入的函數(shù)來(lái)填充指定的范圍。
generate_n:  generate函數(shù)類(lèi)似,填充從指定iterator開(kāi)始的n個(gè)元素。
transform:   將輸入的操作作用與指定范圍內(nèi)的每個(gè)元素,并產(chǎn)生一個(gè)新的序列。重載版本將操作作用在一對(duì)元素上,另外一個(gè)元素來(lái)自輸入的另外一個(gè)序列。結(jié)果輸出到指定容器。

關(guān)系算法

<七>關(guān)系算法(8個(gè))

equal:  如果兩個(gè)序列在標(biāo)志范圍內(nèi)元素都相等,返回true。重載版本使用輸入的操作符代替默認(rèn)的等于操作符。


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


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


max: 返回兩個(gè)元素中較大一個(gè)。重載版本使用自定義比較操作。
max_element: 返回一個(gè)ForwardIterator,指出序列中最大的元素。重載版本使用自定義比較操作。
min:      返回兩個(gè)元素中較小一個(gè)。重載版本使用自定義比較操作。
min_element: 返回ForwardIterator,指出序列中最小的元素。重載版本使用自定義比較操作。


mismatch:  并行比較兩個(gè)序列,指出第一個(gè)不匹配的位置,返回一對(duì)iterator,標(biāo)志第一個(gè)不匹配元素位置。如果都匹配,返回每個(gè)容器的last。重載版本使用自定義的比較操作。

集合算法

<八>集合算法(4個(gè))

set_union: 構(gòu)造一個(gè)有序序列,包含兩個(gè)序列中所有的不重復(fù)元素。重載版本使用自定義的比較操作。
set_intersection: 構(gòu)造一個(gè)有序序列,其中元素在兩個(gè)序列中都存在。重載版本使用自定義的比較操作。
set_difference:  構(gòu)造一個(gè)有序序列,該序列僅保留第一個(gè)序列中存在的而第二個(gè)中不存在的元素。重載版本使用自定義的比較操作。
set_symmetric_difference: 構(gòu)造一個(gè)有序序列,該序列取兩個(gè)序列的對(duì)稱差集(并集-交集)。

堆算法

<九>堆算法(4個(gè))
make_heap: 把指定范圍內(nèi)的元素生成一個(gè)堆。重載版本使用自定義比較操作。
pop_heap: 并不真正把最大元素從堆中彈出,而是重新排序堆。它把first和last-1交換,然后重新生成一個(gè)堆??墒褂萌萜鞯腷ack來(lái)訪問(wèn)被"彈出"的元素或者使用pop_back進(jìn)行真正的刪除。重載版本使用自定義的比較操作。
push_heap: 假設(shè)first到last-1是一個(gè)有效堆,要被加入到堆的元素存放在位置last-1,重新生成堆。在指向該函數(shù)前,必須先把元素插入容器后。重載版本使用指定的比較操作。
sort_heap: 對(duì)指定范圍內(nèi)的序列重新排序,它假設(shè)該序列是個(gè)有序堆。重載版本使用自定義比較操作。

**舉例:

find函數(shù)**

01.#include   
02.#include   
03.#include   
04.using namespace std;  
05.  
06.  
07.int main( )  
08.{  
09.    vector intv;  
10.    for(int i=0;i<10;i++)  
11.        intv.push_back(i);  
12.  
13.    vector::iterator inti;  
14.    inti=find(intv.begin(),intv.end(),50);  
15.    if(inti==intv.end())  
16.        cout<<"沒(méi)有找到匹配的值";  
17.    else  
18.        cout<<"找到了匹配的值";  
19.    cout<

輸出:
沒(méi)有找到匹配的值
找到了匹配的值

find if 函數(shù)

01.#include "stdafx.h"  
02.#include   
03.#include   
04.#include   
05.using namespace std;  
06.bool greater5(int i)  
07.{  
08.    return i>5;  
09.}  
10.  
11.  
12.int main( )  
13.{  
14.    vector intv;  
15.    for(int i=0;i<10;i++)  
16.        intv.push_back(i);  
17.      
18.    vector::iterator inti;  
19.    inti=find_if(intv.begin(),intv.end(),greater5);  
20.    if(inti==intv.end())  
21.        cout<<"沒(méi)有比5大的值";  
22.    else  
23.        cout<<"第一個(gè)比5大的值是 :"<<*inti;   //輸出6  
24.  
25.   getchar();  
26.   return 0;  
27.}  

copy函數(shù)

01.#include "stdafx.h"  
02.#include   
03.#include   
04.#include   
05.#include   
06.using namespace std;  
07.  
08.int main(int argc, _TCHAR* argv[])  
09.{  
10.    vector intv;  
11.    intv.push_back(2);  
12.    intv.push_back(5);  
13.    intv.push_back(3);  
14.  
15.    list intl;  
16.    list::iterator intliter;  
17.    intl.push_back(6);  
18.    intl.push_back(7);  
19.    intl.push_back(8);  
20.    intl.push_back(80);  
21.  
22.    copy(intv.begin(),intv.end(),intl.begin());  
23.    for(intliter=intl.begin();intliter!=intl.end();intliter++)  
24.        cout<<*intliter<<"   ";  
25.  
26.  getchar();  
27.    return 0;  
28.}  

輸出:
2 5 3 80

repalce函數(shù)

01.#include "stdafx.h"  
02.#include   
03.#include   
04.#include   
05.using namespace std;  
06.int main()  
07.{  
08.    vector intv;  
09.    vector::iterator intviter;  
10.    intv.push_back(2);  
11.    intv.push_back(5);  
12.    intv.push_back(3);  
13.    intv.push_back(50);  
14.    intv.push_back(500);  
15.      
16.    replace(intv.begin(),intv.end(),5,6);  
17.    for(intviter=intv.begin();intviter!=intv.end();intviter++)  
18.        cout<<*intviter<<"   ";  
19.  
20.   getchar();  
21.} 

輸出:
2 6 3 50 500

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64118.html

相關(guān)文章

  • 初探STL容器Vector

    vector 特點(diǎn): 1.可變長(zhǎng)的動(dòng)態(tài)數(shù)組 2.使用時(shí)包含頭文件 #include 3.支持隨機(jī)訪問(wèn)迭代器 ? 根據(jù)下標(biāo)隨機(jī)訪問(wèn)某個(gè)元素時(shí)間為常數(shù) ? 在尾部添加速度很快 ? 在中間插入慢 成員函數(shù) 初始化 [cpp] view plaincopy 01.vector(); 初始化成空 02.vector(int n); 初始...

    趙春朋 評(píng)論0 收藏0
  • 初探STL關(guān)聯(lián)容器

    摘要:更加實(shí)際的定義應(yīng)該是一個(gè)集合是一個(gè)容器,它其中所包含的元素的值是唯一的。對(duì)而言,鍵只是指存儲(chǔ)在容器中的某一成員。成員函數(shù)構(gòu)造函數(shù)中的元素都是模板類(lèi)對(duì)象。元素按照成員變量從小到大排列,缺省情況下用定義關(guān)鍵字的小于關(guān)系。 分類(lèi):set, multiset, map, multimap 特點(diǎn):內(nèi)部元素有序排列,新元素插入的位置取決于它的值,查找速度快。 常用函數(shù): find: 查找等于...

    objc94 評(píng)論0 收藏0
  • 系統(tǒng)地學(xué)習(xí)C++

    摘要:本書(shū)主要圍繞一系列逐漸復(fù)雜的程序問(wèn)題,以及用以解決這些問(wèn)題的語(yǔ)言特性展開(kāi)講解。你不只學(xué)到的函數(shù)和結(jié)構(gòu),也會(huì)學(xué)習(xí)到它們的設(shè)計(jì)目的和基本原理。因此我們把精力集中在最有價(jià)值的地方。本書(shū)不僅是對(duì)模板的權(quán)威解釋,而且本書(shū)還深入地介紹了其他一般的思想。 C++ 入門(mén)教程(41課時(shí)) - 阿里云大學(xué) C+...

    joyqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<