版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六~七章非可變序列算法與迭代器算法分類(lèi)迭代器及其分類(lèi)循環(huán)算法查詢算法計(jì)數(shù)算法比較算法1/50算法、容器、迭代器、函數(shù)對(duì)象之關(guān)系圖STL
算法概述容器1某算法迭代器1讀取寫(xiě)入?yún)?shù)傳入返回容器2迭代器2讀取寫(xiě)入?yún)?shù)傳入返回容器n迭代器n讀取寫(xiě)入?yún)?shù)傳入返回…………函數(shù)對(duì)象參數(shù)傳入算法通過(guò)迭代器去操作容器中數(shù)據(jù)2/50MSDNTheSTLalgorithmsaregenericbecausetheycanoperateonavarietyofdatastructures.Thedatastructuresthattheycanoperateonincludenotonly
theSTLcontainer
classessuchasvectorandlist,butalso
program-defineddatastructuresandarraysofelementsthatsatisfytherequirementsofaparticularalgorithm.STLalgorithmsachievethislevelofgeneralitybyaccessingandtraversingtheelementsofacontainerindirectlythroughiterators.TheSTLalgorithmsextendtheactionssupportedbytheoperationsandmemberfunctionsofeachSTLcontainerandallowworking,forexample,withdifferenttypesofcontainerobjectsatthesametime.STL
算法概述3/50算法和容器成員函數(shù)的區(qū)別算法:函數(shù)模板,不是容器(類(lèi)模板)的成員函數(shù)
——直接使用,不是通過(guò)容器對(duì)象調(diào)用算法:有些與容器的成員函數(shù)同名且功能相同
——用法不同頭文件算法:<algorithm>數(shù)值算法:<numeric>函數(shù)對(duì)象:<functional>STL算法概述4/50STL算法分類(lèi)非可變序列算法
算法不修改容器元素的值或順序for_each、線性查找、子序列匹配、元素個(gè)數(shù)、元素比較、最大與最小值可變序列算法
算法要修改容器元素的值或順序復(fù)制、填充、交換、變換、替換、生成、刪除、反轉(zhuǎn)、唯一、環(huán)移、分區(qū)、搬移、隨機(jī)重排。排序相關(guān)算法排序、折半查找、歸并排序、有序集操作、堆排序數(shù)值算法復(fù)數(shù)運(yùn)算、向量運(yùn)算(值數(shù)組valarray)、通用數(shù)值計(jì)算(求和、內(nèi)積、部分和、序列相鄰差)STL算法分類(lèi)5/50非可變序列算法功能函數(shù)名稱(chēng)說(shuō)
明循環(huán)for_each()
對(duì)每個(gè)元素執(zhí)行同一指定操作,返回函數(shù)對(duì)象查詢find()
返回元素值=指定值的第一次出現(xiàn)位置find_if()
返回元素值符合謂詞函數(shù)對(duì)象的第一次出現(xiàn)位置迭代器find_first_of()
返回元素值=指定值之一的第一次出現(xiàn)位置adjacent_find()
返回相鄰元素值相等的第一次出現(xiàn)位置find_end()
返回指定子序列匹配的最后一次出現(xiàn)位置search()
返回指定子序列匹配的第一次出現(xiàn)位置search_n
返回元素值=指定值、連續(xù)n次匹配的第一次位置計(jì)數(shù)count()
返回元素值=指定值的元素個(gè)數(shù)count_if()
返回元素值符合謂詞的元素個(gè)數(shù)比較equal()
返回true:兩個(gè)序列的對(duì)應(yīng)元素都相等mismatch()
返回兩個(gè)序列不同的第一個(gè)元素位置
2個(gè)容器的位置min_element()
返回最小值元素的位置max_element()
返回最大值元素的位置關(guān)系6/50迭代器語(yǔ)義分類(lèi)功能輸入型迭代器
(InputIterator)輸出型迭代器
(OutputIterator)前向型迭代器(ForwardIterator)雙向型迭代器(BidirectionalIterator)隨機(jī)訪問(wèn)型迭代器(RandomIterator)后者包含前者,功能越強(qiáng)具體迭代器的類(lèi)型定義在相應(yīng)容器的頭文件中,預(yù)定義迭代器定義在<iterator>中抽象的語(yǔ)義描述,不是具體的類(lèi)7/50Input能力弱單步向前讀取元素單步:自增iter++或++iter,錯(cuò):iter+1向前:不能反向。錯(cuò):iter--,iter-1讀取:不能寫(xiě)入迭代器所指元素。
對(duì):…=*iter,錯(cuò):*iter=…迭代器賦值與比較iter1=iter2<><=>=!===STL預(yù)定義迭代器istream迭代器迭代器語(yǔ)義分類(lèi)本章“非可變序列算法”用Input型迭代器,8/50Output能力弱單步向前寫(xiě)入元素。類(lèi)似Input,區(qū)別在于:Output:只能寫(xiě)
*iter=…,不能讀…=*iterSTL預(yù)定義迭代器:ostream迭代器,inserter迭代器Forward能力弱單步向前讀寫(xiě)元素。Input和Output的結(jié)合。Bidirectional能力較強(qiáng)單步雙向讀寫(xiě)元素。在Forward基礎(chǔ)上增加:自減--支持所有的容器迭代器。Random能力強(qiáng)隨機(jī)讀寫(xiě)元素,在Bidirectional基礎(chǔ)上增加:iter+i,iter–i,iter[i],iter.at(i)支持容器迭代器:vector,deque,string,array迭代器語(yǔ)義分類(lèi)9/50MSDNThetemplateclassisaniteratoradaptorthatdescribesareverseiteratorobjectthatbehaveslikearandom-accessorbidirectionaliterator,onlyinreverse.Itenablesthebackwardtraversalofarange.template<classRandomIterator>classreverse_iterator{…}//所有標(biāo)準(zhǔn)容器都支持rbegin(),rend()
(const_)reverse_iterator
rbegin()(const_)reverse_iterator
rend()預(yù)定義迭代器:reverse_iterator10/50insert型迭代器Satisfiestherequirementsofanoutputiterator.Insertsratherthanoverwriteselementsintoasequence.Threeclasses:front,back,andgeneral.front_insert_iteratortemplate<classContainer>classfront_insert_iterator //類(lèi)模板:創(chuàng)建迭代器對(duì)象{…}//---------------------------------------------------------------------------template<classContainer> //函數(shù)模板:直接調(diào)用front_insert_iterator<Container>front_inserter(
Container&_Cont); //指定容器:前插元素支持容器:deque,list.
有push_front()成員函數(shù)預(yù)定義迭代器:insert型11/50back_insert_iteratortemplate<classContainer>classback_insert_iterator //類(lèi)模板:創(chuàng)建迭代器對(duì)象{…}//---------------------------------------------------------------------------template<classContainer> //函數(shù)模板:直接調(diào)用back_insert_iterator<Container>back_inserter( Container&_Cont); //指定容器:插入元素支持容器:vector,deque,list,string.有push_back()舉例:list<int>L;back_insert_iterator<list<int>>Iter(L);//創(chuàng)建迭代器對(duì)象*Iter=100;back_inserter(L)=200;//直接用模板函數(shù)預(yù)定義迭代器:insert型12/50insert_iteratortemplate<classContainer>classinsert_iterator //類(lèi)模板:創(chuàng)建迭代器對(duì)象{…}//-------------------------------------------------------------------------template<classContainer> //函數(shù)模板:直接調(diào)用insert_iterator<Container>inserter(Container&_Cont, //指定容器:插入元素typenameContainer::iterator_Where);
_Where:
Aniteratorlocatingthepointofinsertion.支持容器:所有標(biāo)準(zhǔn)容器。都有insert()成員函數(shù)
對(duì)關(guān)聯(lián)容器而言,位置參數(shù)沒(méi)有意義預(yù)定義迭代器:insert型13/50advance()迭代器移動(dòng)函數(shù)template<classInputIterator,classDistance>voidadvance( //函數(shù)模板
InputIterator
&_InIt,//_InIt:輸入型迭代器Distance_Off
//_Off:int,±移動(dòng)量元素個(gè)數(shù));移動(dòng)方向和增量_Off:后退-
+前進(jìn)InputIterator:
所有容器迭代器都支持RandomIterator:隨機(jī)訪問(wèn)c[i],c.at(i) vector,deque,string,array迭代器輔助函數(shù):advance()回顧14/50迭代器輔助函數(shù):advance()移動(dòng)迭代器移動(dòng)迭代器不支持隨機(jī)訪問(wèn)并不提高時(shí)間效率方便了編程15/50distance()計(jì)算兩個(gè)迭代器之間的距離
元素個(gè)數(shù)template<classInputIterator
>intdistance(
InputIterator_First,
//from_Firstto_Last
InputIterator_Last );_Firstmustbeincrementeduntilitequal_Last.即:返回值>=0注:兩個(gè)迭代器必須是同一個(gè)容器的迭代器InputIterator:所有容器迭代器都支持iter_swap()函數(shù)的頭文件algorithm,不是輔助函數(shù)迭代器輔助函數(shù):distance()16/50迭代器輔助函數(shù):distance()17/50MSDNAppliesaspecifiedfunctionobjecttoeachelementinaforwardorderwithinarangeandreturnsthefunctionobject.template<classInputIterator,classFunction>Function
for_each(
//函數(shù)模板InputIterator_First, //迭代器:首個(gè)元素InputIterator_Last, //迭代器:最后元素
Function
_Func
//函數(shù)名或函數(shù)對(duì)象名);范圍:[_First,_Last)
如[begin(),end())循環(huán)算法
for_each()定義回顧18/50for_each()以vector舉例
ShowCube
有且只有一個(gè)參數(shù)(元素)19/50for_each()與函數(shù)對(duì)象以vector舉例函數(shù)對(duì)象類(lèi)
Mult下頁(yè)定義函數(shù)對(duì)象類(lèi)Mult修改初值函數(shù)對(duì)象類(lèi)A下頁(yè)定義20/50for_each()與函數(shù)對(duì)象21/50MSDNLocatesthepositionofthefirstoccurrenceofanelementinarangethathasaspecifiedvalue.template<classInputIterator,classType>InputIterator
find(InputIterator_First,InputIterator_Last,
constType&_Val //指定值);
//_Val:常值或變量引用沒(méi)找到:返回_Last比較:元素值==_Val,若兩端類(lèi)型不配:重載==查詢算法find()定義比較22/50查詢算法
find()find:范圍與結(jié)果以list舉例23/50MSDNLocatesthepositionofthefirstoccurrenceofanelementinarangethatsatisfiesaspecifiedcondition.template<classInputIterator,class
Predicate>InputIterator
find_if(InputIterator_First,InputIterator_Last,
Predicate
_Pred 謂詞:查找條件); 返回bool型的函數(shù)對(duì)象_Pred:user-definedpredicatefunctionobjectpredicate:takessingleargumentandreturnstrueorfalse.查詢算法find_if()定義比較一元謂詞24/50查詢算法find_if()以list舉例find_if
范圍與結(jié)果還有find_if_not()把find_if返回值求反
25/50MSDNSearchesfor1thefirstoccurrenceofanyofseveralvalueswithinatargetrangeor
for2thefirstoccurrenceofanyofseveralelementsthatareequivalentinasensespecifiedbyabinarypredicatetoaspecifiedsetoftheelements.匹配方式:
缺?。J(rèn))
template<classForwardIterator1,classForwardIterator2>ForwardIterator1
find_first_of( //返回:搜索容器的迭代器ForwardIterator1_First1, //搜索范圍:[_First1,_Last1)ForwardIterator1_Last1,ForwardIterator2_First2, //匹配范圍:[_First2,_Last2)ForwardIterator2_Last2);
兩個(gè)容器元素逐個(gè)匹配:搜索元素==目標(biāo)元素,==可改變②
匹配過(guò)程:搜索容器中元素逐個(gè)與匹配容器的每個(gè)元素比較==查詢算法find_first_of()定義二元謂詞26/50匹配方式:二元謂詞指定
template<classForwardIterator1,classForwardIterator2,
class
BinaryPredicate>ForwardIterator1
find_first_of(ForwardIterator1_First1,//搜索范圍:[_First1,_Last1)ForwardIterator1_Last1,ForwardIterator2_First2,//匹配范圍:[_First2,_Last2)ForwardIterator2_Last2,
BinaryPredicate_Comp//二元謂詞:自編匹配條件); //缺?。孩?=_Comp:User-definedpredicatefunctionobjectthatdefinestheconditiontobesatisfiediftwoelementsaretobetakenasequivalent.Abinarypredicatetakestwoargumentsandreturnstruewhensatisfiedandfalsewhennotsatisfied.查詢算法
find_first_of()定義27/50查詢算法find_first_of()匹配方式:缺省方式①匹配方式:謂詞指定②改為<,>等二元謂詞:自編匹配代碼28/50MSDNSearchesfortwoadjacentelementsthatareeitherequalorsatisfyaspecifiedcondition.template<classForwardIterator>
ForwardIterator
adjacent_find( ForwardIterator_First, ForwardIterator_Last
);template<classForwardIterator,classBinaryPredicate>
ForwardIterator
adjacent_find(ForwardIterator_First,ForwardIterator_Last,
BinaryPredicate_Comp//二元謂詞:匹配條件
); //缺?。?=查詢算法adjacent_find()定義29/50查詢算法adjacent_find()缺省方式謂詞指定以deque舉例30/50查詢算法search()和find_end()回顧子序列匹配與find_first_of的區(qū)別是?31/50MSDNSearchesforthefirstsubsequenceinarangethatofaspecifiednumberofelementshavingaparticularvalueorarelationtothatvalueasspecifiedbyabinarypredicate.template<classForwardIterator1,classDiff2,
classType,classBinaryPredicate>ForwardIterator1
search_n(ForwardIterator1_First1,//搜索范圍[_First1,_Last1)ForwardIterator1_Last1,Diff2_Count, //子序列元素個(gè)數(shù)(重復(fù)個(gè)數(shù))
constType&_Val, //子序列元素值(一個(gè)元素)
BinaryPredicate_Comp //缺省:==);查詢算法
search_n()定義回顧32/50查詢算法
search_n()33/50MSDNReturnsthenumberofelementsinarangewhosevaluesmatchaspecifiedvalueorsatisfy
aspecifiedcondition.
count()
count_if()template<classInputIterator,classTypeorPredicate>int
count(//intcount_if(InputIterator_First, //range:[_First,_Last)InputIterator_Last,constType
&_Val //==aspecifiedvalue:count()
//Predicate_Pred
//aspecifiedcondition:count_if());計(jì)數(shù)算法
count/count_if()定義回顧34/50計(jì)數(shù)算法
count/count_if()count()?count_if()?以set
為例35/50MSDNComparestworangeselementbyelementeitherforequality1orequivalenceinasensespecifiedbyabinarypredicate2.template<classInputIterator1,classInputIterator2,classBinaryPredicate>bool
equal(InputIterator1_First1, //range:[_First1,Last1)InputIterator1_Last1, InputIterator2_First2, //第二個(gè)容器開(kāi)始位置
BinaryPredicate_Comp//二元謂詞:自定義比較條件); //缺?。J(rèn)):==比較算法equal()
定義回顧36/50比較算法
equal()equal()37/50MSDNComparestworangeselementbyelementeitherforequality1orequivalentinasensespecifiedbyabinarypredicate2.Return:
thefirstpositionwhereadifferenceoccurs.(2個(gè)容器)template<classInputIterator1,classInputIterator2,classBinaryPredicate>pair<InputIterator1,InputIterator2>
mismatch(InputIterator1_First1, //range:[_First1,Last1)InputIterator1_Last1, InputIterator2_First2, //第二個(gè)容器開(kāi)始位置
BinaryPredicate_Comp //二元謂詞:自定義比較條件); //缺省==,可重載==pair<first,second
>:第一容器和第二容器不匹配的開(kāi)始位置
若全匹配,分別位于二個(gè)容器的末尾比較算法mismatch()
定義回顧38/50比較算法mismatch()怎么定義變量:result誰(shuí)和誰(shuí)比較?39/50比較算法mismatch()
數(shù)組版以普通數(shù)組為例顯示數(shù)組名及每個(gè)元素怎么定義result?40/50比較算法mismatch()
自定義類(lèi)型定義私有成員41/50比較算法mismatch()
自定義類(lèi)型比較前例42/50MSDNCompareselementbyelementbetweentwosequencestodeterminewhichislesserofthetwo.template<classInputIterator1,classInputIterator2,classBinaryPredicate>bool
lexicographical_compare(InputIterator1_First1, //range1:不要求排序InputIterator1_Last1,InputIterator2_First2, //range2:不要求排序InputIterator2_Last2,
BinaryPredicate_Comp
); //比較謂詞。缺省<:不含==Returntrue:ifrange1is
lexicographicallylessthanrange2.lexicographically:一個(gè)接一個(gè)的逐個(gè)比較。類(lèi)似字符串的比較方式,
但返回值只有bool型。字典式比較lexicographical_compare43/50字典式比較lexicographical_compare顯示數(shù)組所有元素a1<a1?a1<a2?44/50MSDNFindsthefirstoccurrenceoflargestelementinaspecifiedrangewheretheorderingcriterionmaybespecifiedbyabinarypredicate.template<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版文化藝術(shù)活動(dòng)專(zhuān)用服裝租賃合同范本3篇
- 2024期貨市場(chǎng)委托交易顧問(wèn)服務(wù)合同范本3篇
- 2024校園景觀設(shè)計(jì)與物業(yè)管理服務(wù)合同
- 2024年餐飲企業(yè)食堂加盟經(jīng)營(yíng)合同3篇
- 2025年度生態(tài)園區(qū)安全隱患樹(shù)木排查與緊急處理合同3篇
- 2024年裝修施工包工包料協(xié)議樣本版
- 2025年度冷鏈物流一體化解決方案采購(gòu)合同范本3篇
- 第八章《浮力》單元測(cè)試(含解析)2024-2025學(xué)年魯科版物理八年級(jí)下學(xué)期
- 2024招投標(biāo)工程廉潔服務(wù)承諾協(xié)議3篇
- 2024版廣告宣傳服務(wù)銷(xiāo)售合同
- 2024年廣西南寧金融投資集團(tuán)有限責(zé)任公司招聘筆試參考題庫(kù)含答案解析
- 2025美國(guó)國(guó)防部財(cái)年美軍武器裝備采購(gòu)預(yù)算中文版
- 70歲換證三力測(cè)試題附答案
- 中華醫(yī)學(xué)會(huì)利益沖突聲明模板
- 數(shù)據(jù)分析控制程序(修改)-y
- 七年級(jí)數(shù)學(xué)(上)有理數(shù)混合運(yùn)算100題(含答案)
- 刑事辯護(hù)策略技巧案例
- 2024年陜西西安高新區(qū)管委會(huì)工作人員招聘筆試參考題庫(kù)附帶答案詳解
- 三年級(jí)上冊(cè)數(shù)學(xué)估算練習(xí)200題
- 二年級(jí)美術(shù)復(fù)習(xí)計(jì)劃
- 物業(yè)采購(gòu)工作總結(jié)
評(píng)論
0/150
提交評(píng)論