国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

STL常用算法

2019-11-10 17:08:56
字體:
供稿:網(wǎng)友

#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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 特克斯县| 栾川县| 伊川县| 启东市| 吐鲁番市| 山东省| 六枝特区| 广灵县| 四平市| 万州区| 镇康县| 孟津县| 济源市| 凌源市| 黄山市| 门源| 上思县| 榆中县| 龙南县| 天镇县| 宝山区| 台山市| 浙江省| 双峰县| 琼中| 乌苏市| 平乡县| 灵丘县| 密云县| 阜新| 改则县| 沁阳市| 广饶县| 新绛县| 广宁县| 永善县| 鄂尔多斯市| 沅江市| 平武县| 噶尔县| 黄梅县|