#include <algorithm>
算法 | 常用版本 | 描述 | 返回Type |
std::find() | find(_InIt _Fisrt,_InIt _Last,_Ty& _Val); | 從兩個(gè)迭代器指定的范圍中查找指定值 | 引用被查找的值的iterator或end() |
std::find_if() | find_if(_InIt _Fisrt,_InIt _Last, _CallBack); | 從兩個(gè)迭代器指定的范圍中查找與回調(diào)謂詞匹配的實(shí)例 | 與謂詞匹配的實(shí)例的iterator或end() |
std::find_if_not() | find_if_not(_InIt _Fisrt,_InIt _Last,_Func _CallBack); | 從迭代器范圍中返回第一個(gè)不符合謂詞的元素 | 第一個(gè)不符合謂詞的元素的iterator或end() |
std::count() | count(_InIt _First,_InIt _Last,_Ty& _Val); | 求得一個(gè)元素序列中與第三個(gè)參數(shù)相符的元素的個(gè)數(shù) | 與第三個(gè)參數(shù)匹配的元素的int個(gè)數(shù) |
std::count_if() | count_if(_InIt _First,_InIt _Last, _CallBack); | 求得一個(gè)序列中與謂詞匹配的元素的個(gè)數(shù) | 符合條件元素的int個(gè)數(shù) |
std::generate() | generate(_FwdIt _First,_FwdIt _Last, _CallBack); | 通過特定值填充一個(gè)迭代器范圍 | void |
std::max() | max(_Left,_Right /*,PRedicate*/); | 通過Operator<或用戶提供的二元謂詞比較任意類型的兩個(gè)元素 | 返回較大的一個(gè)元素的const引用 |
std::min() | min(_Left,_Right /*,Predicate*/); | 通過operator<或用戶提供的二元謂詞比較任意類型的兩個(gè)元素 | 較小的一個(gè)元素的const引用 |
std::max_element() | max_element(_FwdIt _First,_FwdIt _Last /*,_Pred*/); | 從一組任意類型的元素元素序列中查找"最大"的一個(gè) | 引用"最大”的元素的iterator |
std::min_element() | min_element(_FwdIt _First,_FwdIt _Last /*,_Pred*/); | 從一組任意類型的元素元素序列中查找"最小"的一個(gè) | 引用"最小"的元素的iterator |
adjacent_find() | adjacent_find(_FwdIt _First, _FwdIt _Last/*,_Pred*/); | 從一組任意類型的元素序列中查找有重復(fù)的元素 | 引用重復(fù)的第一個(gè)元素的iterator或者end() |
std::all_of() | all_of(_InIt _First,_InIt _Last,Pr _Pred); | 當(dāng)一組元素序列全部與謂詞匹配時(shí)返回true否則返回false | bool |
std::any_of() | any_of(_InIt _First,_InIt _Last,_Pr _Pred); | 當(dāng)一組元素序列中任意一個(gè)元素與謂詞匹配時(shí)返回true否則返回false | bool |
std::none_of() | none_of(_InIt _First,_InIt _Last,_Pr _Pred); | 當(dāng)一組元素序列全部都不與謂詞匹配時(shí)返回true否則返回false | bool |
std::for_each() | for_each(_InIt _First,_InIt _Last,_CallBack); | 對(duì)指定范圍內(nèi)的所有元素執(zhí)行一次_CallBack | _CallBackl類型 |
std::transform() | transform(_InIt_SrcFirst,_InIt _SrcLast,_OutIt_DestBegin,_CallBack); | 對(duì)指定范圍的元素執(zhí)行回調(diào)后生成新的元素,然后將這些新元素保存在第三個(gè)參數(shù)指定的目標(biāo)范圍中 | 引用Dest范圍的past-the-end的_OutputIterator |
- | transform(_InIt _First1,_InIt _Last,_InIt _First2,_OutIt _DestBegin,_CallBack); | 對(duì)兩個(gè)指定序列的元素調(diào)用二元謂詞,并將結(jié)果存入到第四個(gè)參數(shù)指定的容器中 | 引用Dest范圍的past-the-end的_OutputIterator |
std::equal() | equal(_InIt _First1,_InIt _Last1,_InIt _First2 /*,_Pred*/); | 對(duì)兩個(gè)不同類型的容器比較對(duì)應(yīng)位置的值,當(dāng)全部相等或者全部符合謂詞時(shí)返回true否則返回false |
bool |
std::copy() |
copy(_InIt _SrcBegin,_InIt _SrcEnd,_OutIt _DestBegin); | 將一個(gè)序列的元素復(fù)制到另一個(gè)序列中,Src范圍與Dest范圍不能相同,但可以重疊,std::copy不會(huì)向目標(biāo)序列中插入元素,而會(huì)直接修改元素,使用前必須配合_Dest序列的resize()函數(shù)給Dest序列重分配足夠的空間 |
引用Dest范圍past_the_end的_OutputIterator |
std::copy_backward() | copy_backward(_InIt _SrcBegin,_InIt _SrcEnd,_OutIt _DestEnd); | 將Src范圍的元素反向復(fù)制到Dest范圍中,也就是從Src范圍最后一個(gè)元素開始復(fù)制,將這個(gè)元素放在Dest范圍的最后一個(gè)位置,然后再每一次復(fù)制后反向移動(dòng).第三個(gè)參數(shù)應(yīng)該是_DestEnd而不是_DestBegin | 引用Dest范圍的_Begin()的_OutputIterator |
std::copy_if |
copy_if(_InIt _SrcBegin,_InIt _SrcEnd,_OutIt _DestBegin,_Pr _Pred); | 對(duì)一個(gè)序列中每個(gè)準(zhǔn)備復(fù)制的元素執(zhí)行一次_Callback,如果返回值為true,那么執(zhí)行copy操作,否則不執(zhí)行;返回了Dest范圍中最后一個(gè)復(fù)制的元素的后一個(gè)位置,這是為了配合past_the_end來刪除多余的元素:復(fù)制完成后使用_Dest.erase(_CopyEndIt,past_the_end);來刪除Dest范圍多余的元素位置 |
返回引用Dest范圍的最后一個(gè)復(fù)制的元素的后一個(gè)位置的_OutputIterator |
std::copy_n() | copy_n(_InIt _SrcBegin,_Ty _Cnt,_OutIt _DestBegin); | 從Src范圍復(fù)制_Cnt個(gè)元素到Dest范圍,第二個(gè)參數(shù)是一個(gè)指定要復(fù)制的元素個(gè)數(shù)的整數(shù) | 返回引用Dest范圍的past_the_end |
std::partition_copy() |
partition_copy(_InIt _SrcBegin,_InIt _SrcEnd,_OutIt _Dest1,_OutIt _Dest2,_Pr _Pred); | 對(duì)一個(gè)序列的元素進(jìn)行依據(jù)謂詞返回的結(jié)果進(jìn)行劃分復(fù)制,首先對(duì)Src序列中的每一個(gè)元素執(zhí)行一次謂詞,如果返回true,那么將這個(gè)元素復(fù)制到_Dest1,如果返回false,復(fù)制到_Dest2,復(fù)制之前需要使用resize()重置Dest的空間;算法返回一個(gè)打包_Dest1和_Dest2的one_past_the_last_copied的std::pair,利用這個(gè)pair可以刪除多分配的空間 |
打包引用_Dest1和_Dest2的one_past_the_last_copied的_OutputIterator的std::pair |
std::move() |
move(_InIt _SrcBegin,_InIt _SrcEnd,_OutIt _DestBegin); | 需要給元素提供移動(dòng)賦值運(yùn)算符,將Src序列的元素通過移動(dòng)賦值運(yùn)算符移動(dòng)到Dest序列,在移動(dòng)操作中,SrcObject被重置了,因?yàn)镈stObject接管了SrcObject資源的所有權(quán),這意味著在move操作過后Src序列中的對(duì)象不能再使用 | 返回Dest范圍的引用past_the_end的_OutputIterator |
Std::move_backward() | move_backward(_InIt _SrcBegin,_InIt _SrcEnd,_OutIt _DstEnd) | 使用了和std::move()相同的移動(dòng)機(jī)制,但是按照從最后一個(gè)元素向第一個(gè)元素的順序進(jìn)行移動(dòng) | 返回Dest范圍的引用_Begin()的_OutputIterator |
std::replace() | replace(_FwdIt _First,_FwdIt _Last,const _Ty& _OldVal,const _Ty& _NewVal); | 這個(gè)算法將一個(gè)范圍中的匹配某個(gè)值的元素替換為第三個(gè)參數(shù)指定的新值 | void |
std::replace_if() | replace_if(_FwdIt _First,_FwdIt _Last,_Pr _Pred,const _Ty& _NewVal); | 這個(gè)算法將一個(gè)范圍中的匹配某個(gè)謂詞的元素替換為第三個(gè)參數(shù)指定的新值 | void |
std::remove() |
remove(_FwdIt _First,_FwdIt _Last,const _Ty& _Val); | 這個(gè)算法并不是將序列中與_Val匹配的元素直接刪除,而是將它們移動(dòng)到容器的末端,然后返回引用第一個(gè)被移除的元素的iterator,可以利用這個(gè)iterator和end()將被移除的元素徹底擦除 |
返回引用第一個(gè)被移除的元素的_FwdIterator |
std::remove_if() |
remove_if(_FwdIt _First,_FwdIt _Last,_Pr _Pred); | 這個(gè)算法并不是將序列中與謂詞匹配的元素直接刪除,而是將它們移動(dòng)到容器的末端,然后返回引用第一個(gè)被移除的元素的iterator,可以利用這個(gè)iterator和end()將被移除的元素徹底擦除 |
返回引用第一個(gè)被移除的元素的_FwdIterator |
std::unique() |
unique(_FwdIt _First,_FwdIt _Last /*,_Pr _Pred)*/; | std::unique算法是特殊的std::remove算法,和后者一樣,std::unique并不是直接將重復(fù)的元素刪除,而是將它們?nèi)恳苿?dòng)到容器的尾端,然后返回引用第一個(gè)被移除的元素的iterator,可以利用這個(gè)iterator和end()將被移除的元素徹底擦除 |
返回引用第一個(gè)被移除的元素的_FwdIterator |
std::unique_copy | unique(_FwdIt _SrcBegin,_FwdIt _SrcEnd,_OutIt _DestBegin /*,_Pr _Pred*/); | std::unique()的基本形式是就地操作數(shù)據(jù),std::unique_copy則是將操作的結(jié)果復(fù)制到Dest范圍中 | 返回引用Dest范圍的元素的_OutputIterator |
std::reverse() | reverse(_BidIt _First,_BidIt _Last); | 將范圍中的第一個(gè)元素和最后一個(gè)元素交換,第二個(gè)元素和倒數(shù)第二個(gè)元素交換,依此類推 | Void |
std::reverse_copy() | reverse_copy(_BidIt _SrcBegin,_BidIt _SrcEnd,_OutIt _DestBegin); | std::reverse是就地操作數(shù)據(jù),std::reverse_copy將結(jié)果復(fù)制到Dest范圍中 | 返回引用Dest范圍的元素的_OutputIterator |
std::sort() | sort(_RanIt _First,_RanIt _Last /*,_Pr _Pred*/); | 將范圍中的元素按operator<或_CallBack進(jìn)行排序 | Void |
std::merge() |
merge(_InIt _SrcBegin1,_InIt _SrcEnd1,_InIt _SrcBegin2,_InIt _SrcEnd2,_OutIt _DestBegin, /*,_Pr _Prd*/); | 將兩個(gè)排好序的Src序列合并成一個(gè)元素序列,然后將結(jié)果復(fù)制到Dest序列中,并且依然保持排序的順序,結(jié)果是一個(gè)包含兩個(gè)Src序列的所有元素的有序序列,注意一定要使用兩個(gè)排好序的序列進(jìn)行merge操作 |
引用Dest序列的past_the_end的_OutputIterator |
std::is_sorted() | sort(_FwdIt _First,_FwdIt _Last /*,_Pr _Pred*/); | 驗(yàn)證一個(gè)序列是否是有序序列.如果是,返回true,否則返回false | bool |
std:random_shuffle() |
random_shuffle(_RanIt _First,_RanIt _Last /*,_Fn& _Func*/ | 將一個(gè)序列的順序打亂,這個(gè)算法適用于洗牌之類的任務(wù),對(duì)一個(gè)版本默認(rèn)使用標(biāo)準(zhǔn)C庫(kù)的rand()函數(shù),第二個(gè)版本需要提供一個(gè)隨機(jī)數(shù)生成器, 以適應(yīng)不同問題領(lǐng)域的隨機(jī)性 |
void |
集合算法
std::includes() | includes(_InIt _First1,_InIt _Last1,_InIt _First2,_InIt _Last2 /*,_Pr _Pred*/); | 驗(yàn)證第二個(gè)序列是否是第一個(gè)序列的子集,注意不是真子集,而是子集,如果是返回true,否則返回false | bool |
std::set_union() |
set_union(_InIt _SrcBegin1,_InIt _SrcEnd1,_InIt _SrcBegin2,_InIt _SrcEnd2,_OutIt _DestBegin /*,_Pr _Pred*/); | 計(jì)算兩個(gè)有序序列的并集,然后將并集的結(jié)果存入第四個(gè)參數(shù)指定的Dest序列中,注意在計(jì)算前必須給Dest容器分配足夠的空間,因?yàn)镈est范圍最大是_Src1和_Src2的size()和,所以在進(jìn)行合并后有可能會(huì)留下一些空間,set_union算法返回一個(gè)引用Dest范圍中最后一個(gè)被添加進(jìn)去的元素的后一個(gè)位置的iterator,利用它可以將Dest中多余的空間刪除 | 返回一個(gè)引用Dest范圍中最后一個(gè)被添加進(jìn)去的元素的后一個(gè)位置的_OutputIterator
|
std::set_intersection() | set_intersection( _InIt _SrcBegin1,_InIt _SrcEnd1,_InIt _SrcBegin2,_InIt _SrcEnd2,_OutIt _DestBegin /*,_Pr _Pred*/); | 計(jì)算兩個(gè)有序序列的交集,然后將交集的結(jié)果存入第四個(gè)參數(shù)指定的Dest序列中,注意在計(jì)算前必須給Dest容器分配足夠的空間,因?yàn)镈est范圍最大是兩個(gè)_Src范圍的size的最大值,所以在進(jìn)行取交集后有可能會(huì)留下一些空間,set_union算法返回一個(gè)引用Dest范圍中最后一個(gè)被添加進(jìn)去的元素的后一個(gè)位置的iterator,利用它可以將Dest中多余的空間刪除 |
返回一個(gè)引用Dest范圍中最后一個(gè)被添加進(jìn)去的元素的后一個(gè)位置的_OutputIterator
|
std ::set_difference() |
set_difference( _InIt _SrcBegin1,_InIt _SrcEnd1,_InIt _SrcBegin2,_InIt _SrcEnd2,_OutIt _DestBegin /*,_Pr _Pred*/); | 計(jì)算兩個(gè)有序序列的集合差,(集合差:所有存在于第一個(gè)集合,但是不存在與第二個(gè)集合中的所有元素),然后將求集合差的結(jié)果存入第四個(gè)參數(shù)指定的Dest序列中,注意在計(jì)算前必須給Dest容器分配足夠的空間,因?yàn)镈est范圍最大是兩個(gè)_Src范圍的size的最大值,所以在進(jìn)行取交集后有可能會(huì)留下一些空間,set_union算法返回一個(gè)引用Dest范圍中最后一個(gè)被添加進(jìn)去的元素的后一個(gè)位置的iterator,利用它可以將Dest中多余的空間刪除 |
返回一個(gè)引用Dest范圍中最后一個(gè)被添加進(jìn)去的元素的后一個(gè)位置的_OutputIterator
|
std::set_symmetric_difference() | set_symmetric_difference( _InIt _SrcBegin1,_InIt _SrcEnd1,_InIt _SrcBegin2,_InIt _SrcEnd2,_OutIt _DestBegin /*,_Pr _Pred*/); | 計(jì)算兩個(gè)有序序列的對(duì)稱集合差,(對(duì)稱集合差:所有存在于某一個(gè)集合,但是不存在與第二個(gè)集合中的元素),然后將求對(duì)稱集合差的結(jié)果存入第四個(gè)參數(shù)指定的Dest序列中,注意在計(jì)算前必須給Dest容器分配足夠的空間,因?yàn)镈est范圍最大是_Src1和_Src2的size()和,所以在進(jìn)行取交集后有可能會(huì)留下一些空間,set_union算法返回一個(gè)引用Dest范圍中最后一個(gè)被添加進(jìn)去的元素的后一個(gè)位置的iterator,利用它可以將Dest中多余的空間刪除 |
返回一個(gè)引用Dest范圍中最后一個(gè)被添加進(jìn)去的元素的后一個(gè)位置的_OutputIterator |
Warning: 務(wù)必要確保Dest范圍足夠大,足以保存操作的結(jié)果.
對(duì)于set_union()和set_symmetric_difference(),結(jié)果大小的上限是兩個(gè)輸入范圍的總和.
對(duì)于set_intersection()和set_difference(),結(jié)果大小的上限是兩個(gè)輸入范圍大小中的最大值
原文鏈接:http://blog.csdn.net/robin__chou/article/details/53204921
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注