內(nèi)容文稿acm工具-stl_第1頁
內(nèi)容文稿acm工具-stl_第2頁
內(nèi)容文稿acm工具-stl_第3頁
內(nèi)容文稿acm工具-stl_第4頁
內(nèi)容文稿acm工具-stl_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、STL介1STL介1、STL 簡(jiǎn)2、算3、容4、迭代5、使用注一、stack 堆成員函數(shù)實(shí)例程序二、queue 隊(duì)成員函數(shù)實(shí)例程序三、PriorityQueues 優(yōu)先隊(duì)成員函數(shù)實(shí)例程序四、Bitset位集成員函數(shù)實(shí)例程序五、list 列成員函數(shù)實(shí)例程序六、vector向成員函數(shù)實(shí)例程序七、map與多map成員函數(shù)MultiMap實(shí)例程序八、set/multiset 集合與多重集成員函數(shù)Set實(shí)例程序MultiSet實(shí)例程序九、deque(DoubleEndedQueue) 雙端隊(duì)成員函數(shù)實(shí)例程序十、string 字符成員函數(shù)實(shí)例程序十一、常用算法調(diào)min_element/copy/copy_

2、n fill/ remove/ remove/ partition/ sort/lower_bound/upper_bound/要求區(qū)間有binary_search/要求有序區(qū)merge/set_union,ersection,set_difference,ion / heapmin/ max / STL介1、STL簡(jiǎn)STL(Standardibrary,標(biāo)準(zhǔn)模板庫)開發(fā)的一系A(chǔ)lexanderStepanov、MengLeeDavidRMusserSTL介1、STL簡(jiǎn)STL(Standardibrary,標(biāo)準(zhǔn)模板庫)開發(fā)的一系A(chǔ)lexanderStepanov、MengLeeDavidRMu

3、sserSTL 的代碼從廣義上講分為三類:algorithm(算法container(容器和 成的庫來說提供了更好的代碼重用機(jī)會(huì)。在 C+標(biāo)準(zhǔn)中,STL 被組織為下面的 13 個(gè)頭文件、STL各個(gè)部分的主要特點(diǎn)。2、算C+使用模板或者說對(duì)模板進(jìn)行特化的時(shí)候,STL在一個(gè)有效的框架中完成這些算法的模版的參數(shù)中使用一種類型替換掉同一種類中的其他類型。STL 提供了大約 100 個(gè)實(shí)現(xiàn)算法的模版函數(shù),比如算法 for_each 將為指定序列中的每一個(gè)元素調(diào)用指定的函數(shù),stable_sort 以你所指定的規(guī)則對(duì)序列進(jìn)行穩(wěn)定性排序等等。熟悉了 STL 之后,許多代碼可以被大大的化簡(jiǎn),只需要通過調(diào)用一兩

4、個(gè)算組成STL頭文件中最大的一個(gè)(盡管它很好理解、修改、移除、反轉(zhuǎn)、排序、合并等等。體積很小,只包幾個(gè)在序列上面進(jìn)行簡(jiǎn)單數(shù)算的模板函數(shù),包括加法和乘法在序列上的一些操作。中則定義了一些模板類,用3、容代碼,這些代碼都十分相似,只是為了適應(yīng)不同數(shù)據(jù)的變化而在細(xì)節(jié)上有所出入。STL 容器為通過設(shè)置一些模板類,STL 容器對(duì)最常用的數(shù)據(jù)結(jié)構(gòu)提供了支持,這些模板的參數(shù)允指容器部分主要由頭文件, ,可以4的迭代器從作用上來說是最基本的部分理解起來比前兩者都要費(fèi)力化,這種簡(jiǎn)化在 STL 中就是用迭代器來完成的。概括來說,迭代器在 STL 中用來將4的迭代器從作用上來說是最基本的部分理解起來比前兩者都要費(fèi)力

5、化,這種簡(jiǎn)化在 STL 中就是用迭代器來完成的。概括來說,迭代器在 STL 中用來將算法和容器聯(lián)系起來,起著一種黏和劑的作用。幾乎 STL 提供的所有算法都是通過迭代器存取元素序列進(jìn)迭代器部分主要由頭文件,和組成。是個(gè)很小的頭文件,它包括了貫穿使用在 STL 中的幾個(gè)模板,中提供了迭器使用的許多方法,而對(duì)于的描述則十分空間同時(shí)也為某些算法執(zhí)行期間產(chǎn)生的臨時(shí)對(duì)象提供機(jī)制,中的主部分是模板類 allocator,它負(fù)責(zé)產(chǎn)生所有容器中的默認(rèn)分配器5STLstart,end)startend之前一向量連的元列表雙隊(duì)列連的指向不同元素的指針?biāo)M成的數(shù)集合由節(jié)點(diǎn)組成的 樹,每個(gè)節(jié)點(diǎn)都包含著一個(gè)元棧隊(duì)列一、

6、stack 頭文件: stack類型容器usingcout Top: s.top() endl; coutSize:一、stack 頭文件: stack類型容器usingcout Top: s.top() endl; coutSize:s.size()endl; cout Size: s.size() endl; if(s.empty()coutIsemptyendl;else coutIsnotemptyreturnbooltruevoidvoidpush(constTYPE&valvalsize_typeTYPE二、queue 頭文件: queue類型容器實(shí)例程序usingSize: s.

7、size() endl; Front:s.front()endl; Back: s.back() endl;二、queue 頭文件: queue類型容器實(shí)例程序usingSize: s.size() endl; Front:s.front()endl; Back: s.back() endl;Size: s.size() endl; Front:s.front()endl;Back:s.back()if(s.empty() coutIsemptyendl; else cout Is not empty endl;returnbooltruevoidvoidpush(constTYPE&valv

8、alsize_typeTYPE返回一,指向隊(duì)列的最后一個(gè)元素TYPE返回隊(duì)列第一個(gè)元素三、PriorityQueues 頭文件: priority_queue類型容器比較謂詞容器和比較謂詞;如果使用自定義的 struct/class, 則需要重載小于號(hào)運(yùn)算符。舉 3 例/三、PriorityQueues 頭文件: priority_queuepriority_queuefloat,vector,greaterstructbooloperator(constnode&a)constreturn(ipriority_queue以上三個(gè)優(yōu)先隊(duì)列出隊(duì)的元素分別是最小的整數(shù)、最大的浮點(diǎn)數(shù)、成員 i 最小

9、的nodeusing2(a)#definedist2(x,y)struct2(x)x,constbooloperator(constcoordreturn(dist2(x,y)dist2(b.x,struct constbooloperator()(constcoord&a,constcoordreturn(dist2(a.x,a.y)dist2(b.x,booltruevoidvoidpush(constTYPE&val添加一個(gè)元素到優(yōu)先隊(duì)列中,值為 valsize_typeTYPE&top 返回一,指向最高優(yōu)先級(jí)的元素priority_queuecoorda.x=3,a.y a.x=1,a

10、.y priority_queuecoorda.x=3,a.y a.x=1,a.y a.x=2,=cout,s.top().ycoutTop:s.top().x coutSize:coutTop:,s.top().yif(s.empty()coutIsemptyreturncoutIsnotempty、Bitset實(shí)例化: bitsetbs; /bits位,不設(shè)置初值、Bitset實(shí)例化: bitsetbs; /bits位,不設(shè)置初值(全零) bitsetbs(unsignedlong&value);unsignedlong初始化/string來初始bitset:operatorboolbit

11、set:operator(size_tidx)第一種形式返回的是對(duì)在 idx 位置的那個(gè)位第二種類型返回的是 bool 類型,輸出前需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換istream&operator(istream&strm,bitset&盡可能多地讀入包含0,1的字符串,如果長(zhǎng)度小于bitset的長(zhǎng)度, 使用前導(dǎo)0填#include #include usingbitsetbs=構(gòu)造函數(shù)bitset(unsignedlongval以無參的形式創(chuàng)建 bitset,或把一個(gè)長(zhǎng)無符號(hào)整數(shù)轉(zhuǎn)為二進(jìn)制 到 bitset中。模板bitset有多長(zhǎng)。!=,=,&=,=,|=,=,(和普通位運(yùn)算一樣),取某一位(像數(shù)組b

12、ool如果有位被置1返回true,否則返回size_type返回被設(shè)置成 1的位的個(gè)數(shù)bitsetbitset&flip(反轉(zhuǎn)bitset中所有的反上的位是unsignedbool如果沒有位被置1返回true,否則bitsetbitset&reset(置零bitset中所有的置上的位是unsignedbitsetbitset1bitset置上的位是unsigned booltest(如果指定位為1返回true,否則string轉(zhuǎn)換成string返回以便輸出,可直接unsigned long unsignedlong返回四coutbs bs = 63; cout=coutbs bs = 63;

13、cout=bs1Bits:bs.count()coutbs32 coutbs32return五、list 頭文件list類型構(gòu)造函數(shù)(使得可以在定義時(shí)賦初值listlist(size_typen,constTYPE&v) list (const list &from)input_iterator給出n個(gè)五、list 頭文件list類型構(gòu)造函數(shù)(使得可以在定義時(shí)賦初值listlist(size_typen,constTYPE&v) list (const list &from)input_iterator給出n個(gè)初由另一個(gè)list初始由start,end)void assign(input_it

14、erator start, input_iterator end);void assign(size_type num, TYPE區(qū)間start,end)的內(nèi)容到list中清空鏈表num個(gè)值為val的元TYPETYPEiteratoriteratorvoidbooltrueiteratoriteratorerase(iteratorstart, iterator end);刪所指元素并返回下一元素迭代刪除start, end)之間的元素,并返回iteratorinsert(,一個(gè)值為value的元素constTYPE&valvoid insert( iteratorsize_typenum,c

15、onstTYPE&val); void insert( iteratorinput_iterator start, input_iterator end );返回其迭代器及以后的元素后移num個(gè)值為 value的元素在start, end)之間的元素到voidmerge(list&lstvoidmerge(list&lst,bool/boolCmpfunc(Type&a,Type用小于號(hào)進(jìn)行比較 可指定比較函數(shù) Cmpfunc, TYPE類型元素進(jìn)行比較voidvoidvoidpush_back(constTYPE&val將 val連接到鏈表的最后voidpush_front(constTYP

16、E&val將 val連接到鏈表的頭部voidremove(constTYPE&val刪除鏈表中所有值為 val的元素voidremove_if(bool/booltestfunc(TYPE如果testfunc返回true則刪除該元素#include #include usingfor:iteratori=0;i2;coutSize:lis.size()endl; for(li=#include #include usingfor:iteratori=0;i2;coutSize:lis.size()endl; for(li=lis.begin();li!=cout*liendl; coutSiz

17、e:lis.size()endl; for(li=lis.begin();li!=cout*liendl; coutSize:lis.size()endl; for(li=lis.begin();li!=cout*lireturnsize_type返回list中元素的數(shù)量voidresize(size_typen, TYPE val = 0)n,nsize()只保留前面n個(gè)元素,否則最后size() n個(gè)value(0)voidvoidvoidsort(Compvoidsplice(,lst&lstvoid splice( iterator,list &lst, iterator del );

18、void,&lst,iteratorstart,iterator及其后元素后移將lst鏈表中del所指元素將lst鏈表中start,end)之間的元素voidswap(list&lstvoid去除鏈表中重復(fù)元素(離散化)reverse_iteratorreverse_iterator六、vector#include vector類型構(gòu)造函數(shù)(使得可以在定義時(shí)賦初值vector(size_typen,constTYPE&v) vector(const vector &from)vector ( input_iterator input_iterator六、vector#include vecto

19、r類型構(gòu)造函數(shù)(使得可以在定義時(shí)賦初值vector(size_typen,constTYPE&v) vector(const vector &from)vector ( input_iterator input_iterator給出n個(gè)初由另一個(gè)vector初始由start,end)運(yùn)算符,包括運(yùn)算符使 vector 可以像數(shù)組一樣操void assign(input_iterator start, input_iterator end);void assign(size_type num, TYPE清空 區(qū)間start, 的內(nèi)容到list清空vector,TYPEat(size_type返回

20、在 loc位置元素的值,有左TYPETYPEiteratoriterator返回指向vector末尾(最后一個(gè)元void清空 vector(未回收空間booltrueiteratorerase(iteratoriteratorerase(iteratorstart, iterator end);刪除 loc 所指元素并返回下一元素迭代刪除start, end)之間的元素,并返回iteratorinsert(iteratorconstTYPE&valvoid insert( iterator loc, size_typenum,constTYPE&val); void insert( itera

21、tor loc, input_iterator start, input_iterator end );valueloc位置并loc及以后元素后移。start,end)loc位loc及以后元素后移void刪除 vector的最后一個(gè)元素voidpush_back(constTYPE&valval放置到vector的最后voidreserve(size_type預(yù)留至少共容納 size 個(gè)元素的空size_type返回list中元素的數(shù)量voidresize(size_typen, TYPE val = 0)value(0)voidswap(vector&fromreverse_iterator

22、reverse_iterator對(duì)vector進(jìn)行排序可以使用STL的sort,stable_sort,partition,partial_sort, nth_element, STLunique算法對(duì)其進(jìn)行排重,但是一定要這么寫:vt.erase(unique(vt.begin(),vt.end(),使用STL的removeremove_if對(duì)vector進(jìn)行排序可以使用STL的sort,stable_sort,partition,partial_sort, nth_element, STLunique算法對(duì)其進(jìn)行排重,但是一定要這么寫:vt.erase(unique(vt.begin(),

23、vt.end(),使用STL的removeremove_if算法刪除指定元素vt.erase(remove(vt.begin(),vt.end(),Type&value),vt.erase(remove_if(vt.begin(),vt.end(),testfunc),回收vector占用的空間vector(vt).swap(vt); /回收 vt中多余元素占用的空vector().swap(vt); /回收vt占用的所有空的空的vector類型變量(前一句還執(zhí)行了用vt 對(duì)其初始化并與 vt 交換,然后這個(gè)變量在這條語句結(jié)束時(shí)被自。實(shí)例程序usingfori=0;i5;a.push_back

24、(5-coutSize: a0=coutSize:a.size()a.size()a.size();fori=0;icoutai,endl; cout endl;sort(a.begin(),coutSize:a.size()fori=0;i)a.size();coutai,endl; cout endl;coutSize:a.size()endl; return 0;七、map樹實(shí)現(xiàn)的關(guān)聯(lián)式容器,包含“關(guān)鍵字/到相應(yīng)位置??梢灾付ū容^謂詞(使用 std 中的 less/greater 或仿函數(shù))頭文件: 七、map樹實(shí)現(xiàn)的關(guān)聯(lián)式容器,包含“關(guān)鍵字/到相應(yīng)位置??梢灾付ū容^謂詞(使用 std

25、中的 less/greater 或仿函數(shù))頭文件: #includetdtemplate class Key, class T, class Compare = less, classAllocator=allocatorpairclasstemplate class Key, class T, class Compare = less, classAllocator=allocatorpairclasstemplateclassT1,classstruct;T2/other由于pair是個(gè)結(jié)構(gòu)體map/multimap里面存放的是pair, 所以對(duì)于這兩個(gè)容element.second的,p

26、air(key,value)make_pair(key,value)keyvalue的類型,比make_pair(1, 0)make_pair(1, 0.0)的。實(shí)例化(map)mapkey類型value類型實(shí)例化(multimap)multimap/注意v下面的空格謂詞(std 中的 less/greater 或者自定義的仿函數(shù)果使用自定義的 struct/class,3例:,/注意v下面的空格structnode,greaterbooloperator(constnode&a)constreturn(i以上三個(gè) map/multimap 的元素分別按照整數(shù)升序、浮點(diǎn)降序、node.i 升序

27、排列的置)的迭代voidbooltrueinsert(pair &val );(上面的insertmultimap無返回值iterator insert( iterator loc, pair &val ); voidinsert(input_iteratorstart,input_iteratorend一個(gè)pair類型的元素, map返回pair,其 是指向 元素的迭代器,second表示是否 成功loc開始尋找一個(gè)可以 的元素的位置將其 start,end)voiderase(iteratorsize_typeerase(const刪除loc所指元?jiǎng)h除start,end)pairitera

28、tor start, iterator equal_range(constkey_type查找鍵值等于 key的元素區(qū)間為start, end)pair返回iterator find(const key_type end()size_typecount(constKeyType返回鍵值等于 key的元素的個(gè)iteratorlower_bound(key_type&keykey的第一iteratorupper_bound(key_type&keykey的第一個(gè)size_typevoidswap(map&from交換兩個(gè)map中的元返回一個(gè)比較 key的函數(shù)parevalue返回一個(gè)比較 valu

29、e的函數(shù)reverse_iteratorreverse_iteratorMap實(shí)例程序usingstructbooloperator(constT1return(vconstboolT2&a,constT2Map實(shí)例程序usingstructbooloperator(constT1return(vconstboolT2&a,constT2return(a.vmt1;foruser-definedleforuser-defined,cmpmt2; m2i,p1,m2abd=2;,greater,greater:iteratorm2i,p1,p2; m2abc = 1;m2cba = 2;m2.i

30、nsert(make_pair(aaa, m2abf=m2abe=coutm2abcm2i=if(m2i!=m2.end() cout :secondcoutfindnothingcoutIteratefor(m2i=m2.begin();m2i!=m2.end();coutm2i-return:second:iteratormm1i,p1,MultiMap 實(shí)例程序using:iteratormm1i,p1,coutSize:mm1.size()for(mm1i=mm1.begin();mm1i!=mm1.end();coutmm1i-:secondp1p2COUNT:mm1.count(b

31、)Bound:for(mm1i=p1;mm1i!=p2;coutmm1i-:secondreturn八、setmultiset 頭文件實(shí)例化(set)set類型實(shí)例化(multiset)multiset類型構(gòu)造函數(shù)(使得可以在定義時(shí)賦初值set(constsetinput_iterator end)對(duì)八、setmultiset 頭文件實(shí)例化(set)set類型實(shí)例化(multiset)multiset類型構(gòu)造函數(shù)(使得可以在定義時(shí)賦初值set(constsetinput_iterator end)對(duì)應(yīng) multiset也有這三個(gè)構(gòu)造函由另一個(gè)set初始由start,end)運(yùn)算符包括itera

32、toriteratorvoidbooltrueiteratorinsert(TYPE&val(insertmultiset無返回值) iteratorinsert(iteratorloc,TYPE voidinsert(input_iteratorinput_iteratorend一個(gè)元素set分別元素的迭代器和是成從loc開始尋找一個(gè)可值為的元素的位置將并返回其迭代start,end)voiderase(iteratorsize_typeerase(const刪除loc所指元?jiǎng)h除start,end)pairiterator start, iterator equal_range(constk

33、ey_typemultisetkey的所有元返回指示范圍的兩個(gè)迭代器以 pair size_typecount(constKeyType查找容器中值為 key的元素的個(gè)iterator find(const key_type end()iteratorlower_bound(key_type&keykey的第一iteratorupper_bound(key_type&keykey的第一個(gè)size_typevoidswap(vector&from返回一個(gè)比較 key的函數(shù)parevalue返回一個(gè)比較 value的函數(shù)Setusingstructkey,value1,booloperator(c

34、onstT1return(keySetusingstructkey,value1,booloperator(constT1return(keykey,v1,v2; booloperator()(constT2&a,constT2return(a.keysets2; #if 1setset:iteratoriter1;setstring,greatersetstring,greater:iteratoriter1; coutITERATE:for(iter1=s1.begin();iter1!=s1.end();iter1+) cout (*iter1) endl;coutFIND:endl;

35、iter1 = s1.find(abc);if(iter1!=s1.end() cout*iter1returncoutNOTFOUNDreverse_iteratorreverse_iteratorMultiSet 實(shí)例程序usingstructkey,value1,booloperator(constT1return(keyMultiSet 實(shí)例程序usingstructkey,value1,booloperator(constT1return(keykey,v1,v2; booloperator()(constT2&a,constT2return(a.keymultisets2;mult

36、isets3; #if 1multiset:iteratoriter1;greatergreater:iteratorcoutfor(iter1=s1.begin();iter1!=s1.end();cout(*iter1)coutFIND:iter1=if(iter1!=cout*iter1coutNOTFOUNDcoutCOUNT:s1.count(abc)endl; cout BOUND: endl;multiset:iterators1i,p1,p1=p2=for(s1i=p1;s1i!=p2;s1i+) cout (*s1i) endl;return九、deque(DoubleEnd

37、edQueue) deque 和vector 很相似但是它允許在容器頭部快和刪(就像在尾部一樣并提供對(duì)元素隨的能九、deque(DoubleEndedQueue) deque 和vector 很相似但是它允許在容器頭部快和刪(就像在尾部一樣并提供對(duì)元素隨的能力(但速度稍慢于vector頭文件: dequei=0;i5;a.push_back(5-coutSize:a.size()coutSize:a.size()a.size();fori=0;icoutai,coutsort(a.begin(),coutSize:a.size()fori=0;i)a.size();coutai,coutcou

38、tSize:a.size()endl; return 0;TYPEval=nsize()個(gè)元素置為 value(如果不給出,默認(rèn)為 voidswap(vector&fromreverse_iteratorreverse_iterator十、string 頭文件:#includeiostream就可以用了實(shí)例化:string StringName;string( const string& s ); string(size_type length, 十、string 頭文件:#includeiostream就可以用了實(shí)例化:string StringName;string( const stri

39、ng& s ); string(size_type length, const char& ch)string( const char* str ); length );string( const string& str, size_type index, size_type length );string( input_iterator start, input_iterator end );使用一個(gè) string來初始使用length個(gè)字符ch來初始使用一個(gè)字符數(shù)組初始化(ASCII0 結(jié)束用一個(gè)stringindex開始的最length 個(gè)字符初始用start,end)=,=,!=,+,

40、+=,=,可以像字符數(shù)組一樣隨和寫string&append(conststring& str );string&append(constchar*str); size_typeindex,size_typelen); string& append( const char* str, size_type num );ch );string&append(input_iterator start, input_iterator end );追加一個(gè)stringindex開始的最len個(gè)字追加一個(gè)字符數(shù)組最多 num 個(gè)字追加num個(gè)字符追加start,end)voidassign(size_ty

41、penum,const char& val );input_iterator end );string&assign(conststring& str );string&assign(constchar*str); string& assign( const char* str, size_type num );string&assign( const string& 賦值,num個(gè)字符賦值,start,end)賦值,stringstr賦值,用字符數(shù)組最多 num 個(gè)字賦值string index開始的最size_typeindex,size_typelenlen個(gè)字TYPE&at(size_

42、typeloc返回在指定位置 locsize_typeindex,size_typelenlen個(gè)字TYPE&at(size_typeloc返回在指定位置 loc的字符或?qū)慶onst_iteratorbegin()constchar*返回一個(gè)標(biāo)準(zhǔn)c字符串,但是不允許修改,否則會(huì)破壞string的size_typecapacity()void清空 string,但是不回收空compare(stringa,string比較兩個(gè)字符串,ab返回正數(shù)size_type copy( char* str, size_type num, size_type index = 0 ); /注意!調(diào)用這個(gè)函數(shù)的時(shí)

43、候會(huì)自動(dòng)調(diào)memset(str,NULL,stringindex(0)開始的最多num個(gè)字符copy到字符數(shù)組str中,copy的字符數(shù)。不建議使用。constchar返回指向第一個(gè)字符的指針(不要修改boolempty()返回true如果字符串長(zhǎng)為const_iteratorend()iteratorerase(iteratorloc); iteratorerase(iteratorstart, iterator end );string&erase(size_typeindex=0, size_type num = n );刪除loc位置的字刪除start,end)之間的字刪除從index

44、開始的num個(gè)字符,返size_type index );size_typefind(constchar*str, size_type index );size_typefind(constchar*str, size_type index, size_type length );index );置,找不到就返回(常量置,找不到就返回(常量string:nistream& getline( istream& is, string&s,charistream& getline( istream& is, string&s,chardelimiter=n從輸入流is中讀入一些字符到strdelim

45、iter(默認(rèn)為n)結(jié)char& ch );string&insert(size_typeindex, const string& str );string&insert(size_typeindex, const char* str );string&insert(size_typeindex1, const string& str, size_type index2, size_type num );string& insert( size_type index, constchar*str,size_typenum); string& insert( size_type index, s

46、ize_type num, char ch );num, const char& ch );voidinsert(iteratori,iterator start, iterator end );在迭代器i指向的位一個(gè)字符在位置一個(gè)在位置一個(gè)C字符在index1位string從開始的最多num個(gè)字在index位C字符串的最多在index位num個(gè)字符在迭代器i指向的位num個(gè)字在迭代器i指向的位置size_type返回 string 的長(zhǎng)度(和size()一樣size_typevoidpush_back(char字符cstring的末reverse_iteratorreverse_iterat

47、orstring&replace(size_typeindex, string&replace(size_typeindex, size_typenum,constchar*str); string&replace(size_typeindex, size_type num1, const char* str, size_type num2 );替換(index開始最多num個(gè)字符)(string為(string strindex2開始的最多 num2個(gè)字符)為(C字符串str)替換(index開始最多num1個(gè)字符)為(C字符串str中的num2個(gè)字符,有可str占用的空間string(st

48、r).swap(str);保留現(xiàn)有有效元素 string ().swap(str); /刪除所有元素str.erase(unique(str.begin(),str.end(),f(“%s”,string 的忽略大小寫str占用的空間string(str).swap(str);保留現(xiàn)有有效元素 string ().swap(str); /刪除所有元素str.erase(unique(str.begin(),str.end(),f(“%s”,string 的忽略大小寫排序仿函數(shù)structbooloperator()(conststring&a,conststringi=0;ia.size()&

49、ib.size();if(toupper(ai)toupper(bi)returnfalse;returna.size()string&replace(size_typeindex, size_type num1, size_type num2, char ch );string& replace( iterator start, iteratorend,conststring&str); string& replace( iterator start, iterator end, const char* str ); string& replace( iterator start, iter

50、ator end, const char* str, size_type num );string& replace( iterator start, iteratorend,size_typenum,char ch );為(num2ch)替換(本串中start,nd)之間字符)為 (string str)替換(本串中start,end)之間字符)(C字符串替換(本串中start,end)之間字符)(c字符串str中最多num個(gè)字符,會(huì)越界替換(本串中start,end)之間字符)num個(gè)字符voidreserve(size_typesize為string開辟至少能寸下size個(gè)字符的TYPE

51、& val = TYPE() );stringsize sizesize()val格式同 find,逆向查size_typestring substr( size_type index, size_type length = nstringlength就到結(jié)尾voidswap(stringstr交換內(nèi)setignoreCaseStringSet; mapignoreCaseStringMap;實(shí)例程序usingstringt1,t1t1:setignoreCaseStringSet; mapignoreCaseStringMap;實(shí)例程序usingstringt1,t1t1:t1,t2:t2t

52、20=t20t1+=coutt1=if(t1=t1=t2coutt1!=t2%sn,f(t1unsigned=if(idx) coutfindindexidxcoutnotfoundstring=t3.replace(1,2,coutt3:t3,size=t3.size()a(num,for_each(a.begin(),a.end(),neg);/a中元素變?yōu)槠湎喾醋⒁猓喝绻枰獙?duì)元素進(jìn)行改動(dòng),定義的函數(shù)和仿函數(shù)中需要使傳參2.min_element/end,Cmpfuncfunc); end,Cmpfunc返回區(qū)間being, end)之間的最小/最大元素,可以提供比較函數(shù)/仿函數(shù)(二元)

53、,返回3.copy /copy_n iteratorcopy(iteratorbegin,iteratorend,iteratorto); iterator copy_n(iterator begin, size_t n, iterator to);copy把begin, end)之間的元素拷貝到從 to 開始的一段區(qū)間,拷貝完畢后返回目標(biāo)間的結(jié)尾(最后一個(gè)拷貝位置的下一個(gè)位置)copy_n 把從 begin 開始的 n 個(gè)元素拷貝到從to 開始的位置返回目標(biāo)區(qū)間的結(jié)尾(同copy)iterator 和可以是普通的iterator或者reverse_iterator, 也可以是數(shù)組的指針。例a

54、3=1,2,3,copy(a,a+3,copy_n(a,3,/把區(qū)間a, a+3)的元素拷貝到從b開始的等長(zhǎng)區(qū)/把從a開始的3個(gè)元素拷貝到從b開始的等長(zhǎng)區(qū)4. fill / void,iteratorlast,constT&將end)之間的元素賦值為iterator,Sizen,constT&將例fill(a, a+10, 0); /0填充區(qū)間a, a+10) fill(a,10,0);將end)之間的元素賦值為iterator,Sizen,constT&將例fill(a, a+10, 0); /0填充區(qū)間a, a+10) fill(a,10,0);0填充從a開始的10個(gè)元素實(shí)例程序#incl

55、udeusingfill(a,a+10,fori=0;if(%d,fill_n(a,10,fori=if(%d,stringfill(b,b+ifori=f(%sn,return5.remove/iterator remove(iterator begin, iterator end, const T &value) iteratorremove_if(iteratorbegin,iteratorend,functiontest)按區(qū)間中原有元素的相對(duì)次序?qū)⒉恍枰瞥脑靥崆?,覆蓋需要被刪除的元素(指定或是(一元判斷函數(shù) test)返回 true的值),返回新的結(jié)尾。它不刪除新的結(jié)尾和舊的結(jié)

56、尾之間的元素,所以一般是結(jié)合erase使用:例for( i=0; i10; i+) vt.push_back(i); vt.erase(remove(vt.begin(),vt.end(),3),vt.end();實(shí)例程序#include#includeusingboolreturn(i*e=remove(a,a+5,coutforEND:(e-a)i=0;iusingboolreturn(i*e=remove(a,a+5,coutforEND:(e-a)i=0;i Left:*s=a;s5;coutaie;s+)cout*sd10=e=remove_if(d,d+10,coutforEND:

57、(e-d)i=0;i Left:*s=d;s10;coutdie;s+)cout*s:iteratorb+7,vi=remove(v.begin(),v.end(),/v.erase(remove(v.begin(),v.end(),1),v.end(); cout Size: v.size() endl;fori=0;i)v.size();+i) coutreturn6. iteratorunique(iteratorbegin,iteratorend,Cmpfunc如果區(qū)間是將(二元比較函數(shù)cmp)傳給sort函數(shù)排序的,那么需要將(cmp函數(shù))傳給 unique 才可以得到想要的結(jié)果。和

58、 remove 一樣 unique 并不真的移除新的結(jié)尾和舊的結(jié)尾之間的元素,所以一般也需要結(jié)合erase使用。例:for(i=0;i10;i+)vt.push_back(i);vt.push_back(i+1); vt.erase(unique(vt.begin(), vt.end(), vt.end();實(shí)例程序#include#includeusinga7=*e=unique(a,a+coutEND:(e-實(shí)例程序#include#includeusinga7=*e=unique(a,a+coutEND:(e-a)fori=0;i7;+i) coutai=copy(b,b+7,back_

59、inserter(v); unique(v.begin(), v.end();/v.erase(unique(v.begin(),v.end(),coutSize:v.size()forreturni=0;i)v.size();+i)coutvi7. eiteratore(iteratorbegin,iteratormiddle,iterator將begin, middle)和middle, end)兩個(gè)區(qū)間內(nèi)的元素互換最多只需要 end-次交換。例alpha=abcdefghijklmnopqrstuvwxyz; e(alpha, alpha + 13, alpha + 26);f(%sn,

60、alpha);輸出為8. random_shuffle(iteratorbegin,iterator將begin, end)之間的元素隨機(jī)重排列,例N=A=1,2,3,4,5,6,7,random_shuffle(A, A + N); copy(A,A+N,ostream_iterator(cout,輸出可能為71632548,或其它40,319中排列中的任意一9.partition/iteratorstable_partition(iteratorbegin,iteratorend,把符合條件(一元判斷9.partition/iteratorstable_partition(iterator

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論