内容文稿acm工具-stl_第1页
内容文稿acm工具-stl_第2页
内容文稿acm工具-stl_第3页
内容文稿acm工具-stl_第4页
内容文稿acm工具-stl_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STL介1STL介1、STL 简2、算3、容4、迭代5、使用注一、stack 堆成员函数实例程序二、queue 队成员函数实例程序三、PriorityQueues 优先队成员函数实例程序四、Bitset位集成员函数实例程序五、list 列成员函数实例程序六、vector向成员函数实例程序七、map与多map成员函数MultiMap实例程序八、set/multiset 集合与多重集成员函数Set实例程序MultiSet实例程序九、deque(DoubleEndedQueue) 双端队成员函数实例程序十、string 字符成员函数实例程序十一、常用算法调min_element/copy/copy_

2、n fill/ remove/ remove/ partition/ sort/lower_bound/upper_bound/要求区间有binary_search/要求有序区merge/set_union,ersection,set_difference,ion / heapmin/ max / STL介1、STL简STL(Standardibrary,标准模板库)开发的一系AlexanderStepanov、MengLeeDavidRMusserSTL介1、STL简STL(Standardibrary,标准模板库)开发的一系AlexanderStepanov、MengLeeDavidRMu

3、sserSTL 的代码从广义上讲分为三类:algorithm(算法container(容器和 成的库来说提供了更好的代码重用机会。在 C+标准中,STL 被组织为下面的 13 个头文件、STL各个部分的主要特点。2、算C+使用模板或者说对模板进行特化的时候,STL在一个有效的框架中完成这些算法的模版的参数中使用一种类型替换掉同一种类中的其他类型。STL 提供了大约 100 个实现算法的模版函数,比如算法 for_each 将为指定序列中的每一个元素调用指定的函数,stable_sort 以你所指定的规则对序列进行稳定性排序等等。熟悉了 STL 之后,许多代码可以被大大的化简,只需要通过调用一两

4、个算组成STL头文件中最大的一个(尽管它很好理解、修改、移除、反转、排序、合并等等。体积很小,只包几个在序列上面进行简单数算的模板函数,包括加法和乘法在序列上的一些操作。中则定义了一些模板类,用3、容代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL 容器为通过设置一些模板类,STL 容器对最常用的数据结构提供了支持,这些模板的参数允指容器部分主要由头文件, ,可以4的迭代器从作用上来说是最基本的部分理解起来比前两者都要费力化,这种简化在 STL 中就是用迭代器来完成的。概括来说,迭代器在 STL 中用来将4的迭代器从作用上来说是最基本的部分理解起来比前两者都要费力

5、化,这种简化在 STL 中就是用迭代器来完成的。概括来说,迭代器在 STL 中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎 STL 提供的所有算法都是通过迭代器存取元素序列进迭代器部分主要由头文件,和组成。是个很小的头文件,它包括了贯穿使用在 STL 中的几个模板,中提供了迭器使用的许多方法,而对于的描述则十分空间同时也为某些算法执行期间产生的临时对象提供机制,中的主部分是模板类 allocator,它负责产生所有容器中的默认分配器5STLstart,end)startend之前一向量连的元列表双队列连的指向不同元素的指针所组成的数集合由节点组成的 树,每个节点都包含着一个元栈队列一、

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类型容器实例程序usingSize: s.

7、size() endl; Front:s.front()endl; Back: s.back() endl;二、queue 头文件: queue类型容器实例程序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返回一,指向队列的最后一个元素TYPE返回队列第一个元素三、PriorityQueues 头文件: priority_queue类型容器比较谓词容器和比较谓词;如果使用自定义的 struct/class, 则需要重载小于号运算符。举 3 例/三、PriorityQueues 头文件: priority_queuepriority_queuefloat,vector,greaterstructbooloperator(constnode&a)constreturn(ipriority_queue以上三个优先队列出队的元素分别是最小的整数、最大的浮点数、成员 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添加一个元素到优先队列中,值为 valsize_typeTYPE&top 返回一,指向最高优先级的元素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实例化: bitsetbs; /bits位,不设置初值、Bitset实例化: bitsetbs; /bits位,不设置初值(全零) bitsetbs(unsignedlong&value);unsignedlong初始化/string来初始bitset:operatorboolbit

11、set:operator(size_tidx)第一种形式返回的是对在 idx 位置的那个位第二种类型返回的是 bool 类型,输出前需要进行强制类型转换istream&operator(istream&strm,bitset&尽可能多地读入包含0,1的字符串,如果长度小于bitset的长度, 使用前导0填#include #include usingbitsetbs=构造函数bitset(unsignedlongval以无参的形式创建 bitset,或把一个长无符号整数转为二进制 到 bitset中。模板bitset有多长。!=,=,&=,=,|=,=,(和普通位运算一样),取某一位(像数组b

12、ool如果有位被置1返回true,否则返回size_type返回被设置成 1的位的个数bitsetbitset&flip(反转bitset中所有的反上的位是unsignedbool如果没有位被置1返回true,否则bitsetbitset&reset(置零bitset中所有的置上的位是unsignedbitsetbitset1bitset置上的位是unsigned booltest(如果指定位为1返回true,否则string转换成string返回以便输出,可直接unsigned long unsignedlong返回四coutbs bs = 63; cout=coutbs bs = 63;

13、cout=bs1Bits:bs.count()coutbs32 coutbs32return五、list 头文件list类型构造函数(使得可以在定义时赋初值listlist(size_typen,constTYPE&v) list (const list &from)input_iterator给出n个五、list 头文件list类型构造函数(使得可以在定义时赋初值listlist(size_typen,constTYPE&v) list (const list &from)input_iterator给出n个初由另一个list初始由start,end)void assign(input_it

14、erator start, input_iterator end);void assign(size_type num, TYPE区间start,end)的内容到list中清空链表num个值为val的元TYPETYPEiteratoriteratorvoidbooltrueiteratoriteratorerase(iteratorstart, iterator end);删所指元素并返回下一元素迭代删除start, end)之间的元素,并返回iteratorinsert(,一个值为value的元素constTYPE&valvoid insert( iteratorsize_typenum,c

15、onstTYPE&val); void insert( iteratorinput_iterator start, input_iterator end );返回其迭代器及以后的元素后移num个值为 value的元素在start, end)之间的元素到voidmerge(list&lstvoidmerge(list&lst,bool/boolCmpfunc(Type&a,Type用小于号进行比较 可指定比较函数 Cmpfunc, TYPE类型元素进行比较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中元素的数量voidresize(size_typen, TYPE val = 0)n,nsize()只保留前面n个元素,否则最后size() n个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去除链表中重复元素(离散化)reverse_iteratorreverse_iterator六、vector#include vector类型构造函数(使得可以在定义时赋初值vector(size_typen,constTYPE&v) vector(const vector &from)vector ( input_iterator input_iterator六、vector#include vecto

19、r类型构造函数(使得可以在定义时赋初值vector(size_typen,constTYPE&v) vector(const vector &from)vector ( input_iterator input_iterator给出n个初由另一个vector初始由start,end)运算符,包括运算符使 vector 可以像数组一样操void assign(input_iterator start, input_iterator end);void assign(size_type num, TYPE清空 区间start, 的内容到list清空vector,TYPEat(size_type返回

20、在 loc位置元素的值,有左TYPETYPEiteratoriterator返回指向vector末尾(最后一个元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的最后一个元素voidpush_back(constTYPE&valval放置到vector的最后voidreserve(size_type预留至少共容纳 size 个元素的空size_type返回list中元素的数量voidresize(size_typen, TYPE val = 0)value(0)voidswap(vector&fromreverse_iterator

22、reverse_iterator对vector进行排序可以使用STL的sort,stable_sort,partition,partial_sort, nth_element, STLunique算法对其进行排重,但是一定要这么写:vt.erase(unique(vt.begin(),vt.end(),使用STL的removeremove_if对vector进行排序可以使用STL的sort,stable_sort,partition,partial_sort, nth_element, STLunique算法对其进行排重,但是一定要这么写: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类型变量(前一句还执行了用vt 对其初始化并与 vt 交换,然后这个变量在这条语句结束时被自。实例程序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树实现的关联式容器,包含“关键字/到相应位置。可以指定比较谓词(使用 std 中的 less/greater 或仿函数)头文件: 七、map树实现的关联式容器,包含“关键字/到相应位置。可以指定比较谓词(使用 std

25、中的 less/greater 或仿函数)头文件: #includetdtemplate class Key, class T, class Compare = less, classAllocator=allocatorpairclasstemplate class Key, class T, class Compare = less, classAllocator=allocatorpairclasstemplateclassT1,classstruct;T2/other由于pair是个结构体map/multimap里面存放的是pair, 所以对于这两个容element.second的,p

26、air(key,value)make_pair(key,value)keyvalue的类型,比make_pair(1, 0)make_pair(1, 0.0)的。实例化(map)mapkey类型value类型实例化(multimap)multimap/注意v下面的空格谓词(std 中的 less/greater 或者自定义的仿函数果使用自定义的 struct/class,3例:,/注意v下面的空格structnode,greaterbooloperator(constnode&a)constreturn(i以上三个 map/multimap 的元素分别按照整数升序、浮点降序、node.i 升序

27、排列的置)的迭代voidbooltrueinsert(pair &val );(上面的insertmultimap无返回值iterator insert( iterator loc, pair &val ); voidinsert(input_iteratorstart,input_iteratorend一个pair类型的元素, map返回pair,其 是指向 元素的迭代器,second表示是否 成功loc开始寻找一个可以 的元素的位置将其 start,end)voiderase(iteratorsize_typeerase(const删除loc所指元删除start,end)pairitera

28、tor start, iterator equal_range(constkey_type查找键值等于 key的元素区间为start, end)pair返回iterator find(const key_type end()size_typecount(constKeyType返回键值等于 key的元素的个iteratorlower_bound(key_type&keykey的第一iteratorupper_bound(key_type&keykey的第一个size_typevoidswap(map&from交换两个map中的元返回一个比较 key的函数parevalue返回一个比较 valu

29、e的函数reverse_iteratorreverse_iteratorMap实例程序usingstructbooloperator(constT1return(vconstboolT2&a,constT2Map实例程序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 实例程序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 头文件实例化(set)set类型实例化(multiset)multiset类型构造函数(使得可以在定义时赋初值set(constsetinput_iterator end)对八、setmultiset 头文件实例化(set)set类型实例化(multiset)multiset类型构造函数(使得可以在定义时赋初值set(constsetinput_iterator end)对应 multiset也有这三个构造函由另一个set初始由start,end)运算符包括itera

32、toriteratorvoidbooltrueiteratorinsert(TYPE&val(insertmultiset无返回值) iteratorinsert(iteratorloc,TYPE voidinsert(input_iteratorinput_iteratorend一个元素set分别元素的迭代器和是成从loc开始寻找一个可值为的元素的位置将并返回其迭代start,end)voiderase(iteratorsize_typeerase(const删除loc所指元删除start,end)pairiterator start, iterator equal_range(constk

33、ey_typemultisetkey的所有元返回指示范围的两个迭代器以 pair size_typecount(constKeyType查找容器中值为 key的元素的个iterator find(const key_type end()iteratorlower_bound(key_type&keykey的第一iteratorupper_bound(key_type&keykey的第一个size_typevoidswap(vector&from返回一个比较 key的函数parevalue返回一个比较 value的函数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 实例程序usingstructkey,value1,booloperator(constT1return(keyMultiSet 实例程序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 很相似但是它允许在容器头部快和删(就像在尾部一样并提供对元素随的能九、deque(DoubleEndedQueue) deque 和vector 很相似但是它允许在容器头部快和删(就像在尾部一样并提供对元素随的能力(但速度稍慢于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()个元素置为 value(如果不给出,默认为 voidswap(vector&fromreverse_iteratorreverse_iterator十、string 头文件:#includeiostream就可以用了实例化:string StringName;string( const string& s ); string(size_type length, 十、string 头文件:#includeiostream就可以用了实例化: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 );使用一个 string来初始使用length个字符ch来初始使用一个字符数组初始化(ASCII0 结束用一个stringindex开始的最length 个字符初始用start,end)=,=,!=,+,

40、+=,=,可以像字符数组一样随和写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 );追加一个stringindex开始的最len个字追加一个字符数组最多 num 个字追加num个字符追加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个字符赋值,start,end)赋值,stringstr赋值,用字符数组最多 num 个字赋值string index开始的最size_typeindex,size_typelenlen个字TYPE&at(size_

42、typeloc返回在指定位置 locsize_typeindex,size_typelenlen个字TYPE&at(size_typeloc返回在指定位置 loc的字符或写const_iteratorbegin()constchar*返回一个标准c字符串,但是不允许修改,否则会破坏string的size_typecapacity()void清空 string,但是不回收空compare(stringa,string比较两个字符串,ab返回正数size_type copy( char* str, size_type num, size_type index = 0 ); /注意!调用这个函数的时

43、候会自动调memset(str,NULL,stringindex(0)开始的最多num个字符copy到字符数组str中,copy的字符数。不建议使用。constchar返回指向第一个字符的指针(不要修改boolempty()返回true如果字符串长为const_iteratorend()iteratorerase(iteratorloc); iteratorerase(iteratorstart, iterator end );string&erase(size_typeindex=0, size_type num = n );删除loc位置的字删除start,end)之间的字删除从index

44、开始的num个字符,返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(默认为n)结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指向的位一个字符在位置一个在位置一个C字符在index1位string从开始的最多num个字在index位C字符串的最多在index位num个字符在迭代器i指向的位num个字在迭代器i指向的位置size_type返回 string 的长度(和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个字符)(string为(string strindex2开始的最多 num2个字符)为(C字符串str)替换(index开始最多num1个字符)为(C字符串str中的num2个字符,有可str占用的空间string(st

48、r).swap(str);保留现有有效元素 string ().swap(str); /删除所有元素str.erase(unique(str.begin(),str.end(),f(“%s”,string 的忽略大小写str占用的空间string(str).swap(str);保留现有有效元素 string ().swap(str); /删除所有元素str.erase(unique(str.begin(),str.end(),f(“%s”,string 的忽略大小写排序仿函数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个字符,会越界替换(本串中start,end)之间字符)num个字符voidreserve(size_typesize为string开辟至少能寸下size个字符的TYPE

51、& val = TYPE() );stringsize sizesize()val格式同 find,逆向查size_typestring substr( size_type index, size_type length = nstringlength就到结尾voidswap(stringstr交换内setignoreCaseStringSet; mapignoreCaseStringMap;实例程序usingstringt1,t1t1:setignoreCaseStringSet; mapignoreCaseStringMap;实例程序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中元素变为其相反注意:如果需要对元素进行改动,定义的函数和仿函数中需要使传参2.min_element/end,Cmpfuncfunc); end,Cmpfunc返回区间being, end)之间的最小/最大元素,可以提供比较函数/仿函数(二元)

53、,返回3.copy /copy_n iteratorcopy(iteratorbegin,iteratorend,iteratorto); iterator copy_n(iterator begin, size_t n, iterator to);copy把begin, end)之间的元素拷贝到从 to 开始的一段区间,拷贝完毕后返回目标间的结尾(最后一个拷贝位置的下一个位置)copy_n 把从 begin 开始的 n 个元素拷贝到从to 开始的位置返回目标区间的结尾(同copy)iterator 和可以是普通的iterator或者reverse_iterator, 也可以是数组的指针。例a

54、3=1,2,3,copy(a,a+3,copy_n(a,3,/把区间a, a+3)的元素拷贝到从b开始的等长区/把从a开始的3个元素拷贝到从b开始的等长区4. fill / void,iteratorlast,constT&将end)之间的元素赋值为iterator,Sizen,constT&将例fill(a, a+10, 0); /0填充区间a, a+10) fill(a,10,0);将end)之间的元素赋值为iterator,Sizen,constT&将例fill(a, a+10, 0); /0填充区间a, a+10) fill(a,10,0);0填充从a开始的10个元素实例程序#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)按区间中原有元素的相对次序将不需要移除的元素提前,覆盖需要被删除的元素(指定或是(一元判断函数 test)返回 true的值),返回新的结尾。它不删除新的结尾和旧的结

56、尾之间的元素,所以一般是结合erase使用:例for( i=0; i10; i+) vt.push_back(i); vt.erase(remove(vt.begin(),vt.end(),3),vt.end();实例程序#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如果区间是将(二元比较函数cmp)传给sort函数排序的,那么需要将(cmp函数)传给 unique 才可以得到想要的结果。和

58、 remove 一样 unique 并不真的移除新的结尾和旧的结尾之间的元素,所以一般也需要结合erase使用。例:for(i=0;i10;i+)vt.push_back(i);vt.push_back(i+1); vt.erase(unique(vt.begin(), vt.end(), vt.end();实例程序#include#includeusinga7=*e=unique(a,a+coutEND:(e-实例程序#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)两个区间内的元素互换最多只需要 end-次交换。例alpha=abcdefghijklmnopqrstuvwxyz; e(alpha, alpha + 13, alpha + 26);f(%sn,

60、alpha);输出为8. random_shuffle(iteratorbegin,iterator将begin, end)之间的元素随机重排列,例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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论