《STL常用算法》由会员分享,可在线阅读,更多相关《STL常用算法(9页珍藏版)》请在金锄头文库上搜索。
1、STL常用算法#include 算法常用版本描述返回Typestd:find()find(_InIt _Fisrt,_InIt _Last,_Ty& _Val);从两个迭代器指定的范围中查找指定值引用被查找的值的iterator或end()std:find_if()find_if(_InIt _Fisrt,_InIt _Last,_CallBack);从两个迭代器指定的范围中查找与回调谓词匹配的实例与谓词匹配的实例的iterator或end()std:find_if_not()find_if_not(_InIt _Fisrt,_InIt _Last,_Func _CallBack);从迭代器范
2、围中返回第一个不符合谓词的元素第一个不符合谓词的元素的iterator或end()std:count()count(_InIt _First,_InIt _Last,_Ty& _Val);求得一个元素序列中与第三个参数相符的元素的个数与第三个参数匹配的元素的int个数std:count_if()count_if(_InIt _First,_InIt _Last, _CallBack);求得一个序列中与谓词匹配的元素的个数符合条件元素的int个数std:generate()generate(_FwdIt _First,_FwdIt _Last,_CallBack);通过特定值填充一个迭代器范围v
3、oidstd:max()max(_Left,_Right /*,Predicate*/);通过operator或用户提供的二元谓词比较任意类型的两个元素返回较大的一个元素的const引用std:min()min(_Left,_Right /*,Predicate*/);通过operator或用户提供的二元谓词比较任意类型的两个元素较小的一个元素的const引用std:max_element()max_element(_FwdIt _First,_FwdIt _Last /*,_Pred*/);从一组任意类型的元素元素序列中查找最大的一个引用最大”的元素的iteratorstd:min_elem
4、ent()min_element(_FwdIt _First,_FwdIt _Last /*,_Pred*/);从一组任意类型的元素元素序列中查找最小的一个引用最小的元素的iteratoradjacent_find()adjacent_find(_FwdIt_First, _FwdIt _Last/*,_Pred*/);从一组任意类型的元素序列中查找有重复的元素引用重复的第一个元素的iterator或者end()std:all_of()all_of(_InIt _First,_InIt _Last,Pr _Pred);当一组元素序列全部与谓词匹配时返回true否则返回falseboolstd:
5、any_of()any_of(_InIt _First,_InIt _Last,_Pr _Pred);当一组元素序列中任意一个元素与谓词匹配时返回true否则返回falseboolstd:none_of()none_of(_InIt _First,_InIt _Last,_Pr_Pred);当一组元素序列全部都不与谓词匹配时返回true否则返回falseboolstd:for_each()for_each(_InIt _First,_InIt _Last,_CallBack);对指定范围内的所有元素执行一次_CallBack_CallBackl类型std:transform()transfor
6、m(_InIt_SrcFirst,_InIt _SrcLast,_OutIt_DestBegin,_CallBack);对指定范围的元素执行回调后生成新的元素,然后将这些新元素保存在第三个参数指定的目标范围中引用Dest范围的past-the-end的_OutputIterator-transform(_InIt _First1,_InIt _Last,_InIt _First2,_OutIt _DestBegin,_CallBack);对两个指定序列的元素调用二元谓词,并将结果存入到第四个参数指定的容器中引用Dest范围的past-the-end的_OutputIteratorstd:equ
7、al()equal(_InIt _First1,_InIt _Last1,_InIt _First2 /*,_Pred*/);对两个不同类型的容器比较对应位置的值,当全部相等或者全部符合谓词时返回true否则返回falseboolstd:copy()copy(_InIt _SrcBegin,_InIt _SrcEnd,_OutIt _DestBegin);将一个序列的元素复制到另一个序列中,Src范围与Dest范围不能相同,但可以重叠,std:copy不会向目标序列中插入元素,而会直接修改元素,使用前必须配合_Dest序列的resize()函数给Dest序列重分配足够的空间引用Dest范围pa
8、st_the_end的_OutputIteratorstd:copy_backward()copy_backward(_InIt_SrcBegin,_InIt_SrcEnd,_OutIt _DestEnd);将Src范围的元素反向复制到Dest范围中,也就是从Src范围最后一个元素开始复制,将这个元素放在Dest范围的最后一个位置,然后再每一次复制后反向移动.第三个参数应该是_DestEnd而不是_DestBegin引用Dest范围的_Begin()的_OutputIteratorstd:copy_ifcopy_if(_InIt_SrcBegin,_InIt_SrcEnd,_OutIt _De
9、stBegin,_Pr _Pred);对一个序列中每个准备复制的元素执行一次_Callback,如果返回值为true,那么执行copy操作,否则不执行;返回了Dest范围中最后一个复制的元素的后一个位置,这是为了配合past_the_end来删除多余的元素:复制完成后使用_Dest.erase(_CopyEndIt,past_the_end);来删除Dest范围多余的元素位置返回引用Dest范围的最后一个复制的元素的后一个位置的_OutputIteratorstd:copy_n()copy_n(_InIt_SrcBegin,_Ty _Cnt,_OutIt _DestBegin);从Src范围复
10、制_Cnt个元素到Dest范围,第二个参数是一个指定要复制的元素个数的整数返回引用Dest范围的past_the_endstd:partition_copy()partition_copy(_InIt_SrcBegin,_InIt_SrcEnd,_OutIt _Dest1,_OutIt _Dest2,_Pr _Pred);对一个序列的元素进行依据谓词返回的结果进行划分复制,首先对Src序列中的每一个元素执行一次谓词,如果返回true,那么将这个元素复制到_Dest1,如果返回false,复制到_Dest2,复制之前需要使用resize()重置Dest的空间;算法返回一个打包_Dest1和_De
11、st2的one_past_the_last_copied的std:pair,利用这个pair可以删除多分配的空间打包引用_Dest1和_Dest2的one_past_the_last_copied的_OutputIterator的std:pairstd:move()move(_InIt_SrcBegin,_InIt _SrcEnd,_OutIt _DestBegin);需要给元素提供移动赋值运算符,将Src序列的元素通过移动赋值运算符移动到Dest序列,在移动操作中,SrcObject被重置了,因为DstObject接管了SrcObject资源的所有权,这意味着在move操作过后Src序列中的
12、对象不能再使用返回Dest范围的引用past_the_end的_OutputIteratorStd:move_backward()move_backward(_InIt _SrcBegin,_InIt _SrcEnd,_OutIt _DstEnd)使用了和std:move()相同的移动机制,但是按照从最后一个元素向第一个元素的顺序进行移动返回Dest范围的引用_Begin()的_OutputIteratorstd:replace()replace(_FwdIt _First,_FwdIt _Last,const _Ty& _OldVal,const _Ty& _NewVal);这个算法将一个范
13、围中的匹配某个值的元素替换为第三个参数指定的新值voidstd:replace_if()replace_if(_FwdIt _First,_FwdIt _Last,_Pr _Pred,const _Ty& _NewVal);这个算法将一个范围中的匹配某个谓词的元素替换为第三个参数指定的新值voidstd:remove()remove(_FwdIt _First,_FwdIt _Last,const _Ty& _Val);这个算法并不是将序列中与_Val匹配的元素直接删除,而是将它们移动到容器的末端,然后返回引用第一个被移除的元素的iterator,可以利用这个iterator和end()将被移
14、除的元素彻底擦除返回引用第一个被移除的元素的_FwdIteratorstd:remove_if()remove_if(_FwdIt _First,_FwdIt _Last,_Pr _Pred);这个算法并不是将序列中与谓词匹配的元素直接删除,而是将它们移动到容器的末端,然后返回引用第一个被移除的元素的iterator,可以利用这个iterator和end()将被移除的元素彻底擦除返回引用第一个被移除的元素的_FwdIteratorstd:unique()unique(_FwdIt _First,_FwdIt _Last /*,_Pr _Pred)*/;std:unique算法是特殊的std:r
15、emove算法,和后者一样,std:unique并不是直接将重复的元素删除,而是将它们全部移动到容器的尾端,然后返回引用第一个被移除的元素的iterator,可以利用这个iterator和end()将被移除的元素彻底擦除返回引用第一个被移除的元素的_FwdIteratorstd:unique_copyunique(_FwdIt _SrcBegin,_FwdIt _SrcEnd,_OutIt _DestBegin /*,_Pr _Pred*/);std:unique()的基本形式是就地操作数据,std:unique_copy则是将操作的结果复制到Dest范围中返回引用Dest范围的元素的_OutputIteratorstd:reverse()reverse(_BidIt _First,_BidIt _Last);将范围中的第一个元素和最