STL 算法函数 总结

按是否修改容器中的内容和排序及相关操作,给标准库中的算法函数进行分类:
非修改性序列操作(12个)
循环
for_each()
对序列中的每个元素执行某操作
查找
find()
在序列中找出某个值的第一次出现的位置
find_if()
在序列中找出符合某谓词的第一个元素
find_end()
在序列中找出一子序列的最后一次出现的位置
find_first_of()
在序列中找出第一次出现指定值集中之值的位置
adjacent_find()
在序列中找出相邻的一对值
计数
count()
在序列中统计某个值出现的次数
count_if()
在序列中统计与某谓词匹配的次数
比较
mismatch()
找出两个序列相异的第一个元素
equal()
两个序列中的对应元素都相同时为真
搜索
search()
在序列中找出一子序列的第一次出现的位置
search_n()
在序列中找出一值的连续n次出现的位置
 
修改性序列操作(27个)
复制
copy()
从序列的第一个元素起进行复制
copy_backward()
从序列的最后一个元素起进行复制
交换
swap()
交换两个元素
swap_ranges()
交换指定范围的元素
iter_swap()
交换由迭代器所指的两个元素
变换
transform()
将某操作应用于指定范围的每个元素
替换
replace()
用一个给定值替换一些值
replace_if()
替换满足谓词的一些元素
replace_copy()
复制序列时用一给定值替换元素
replace_copy_if()
复制序列时替换满足谓词的元素
填充
fill()
用一给定值取代所有元素
fill_n()
用一给定值取代前n个元素
生成
generate()
用一操作的结果取代所有元素
generate_n()
用一操作的结果取代前n个元素
删除
remove()
删除具有给定值的元素
remove_if()
删除满足谓词的元素
remove_copy()
复制序列时删除具有给定值的元素
remove_copy_if()
复制序列时删除满足谓词的元素
唯一
unique()
删除相邻的重复元素
unique_copy()
复制序列时删除相邻的重复元素
反转
reverse()
反转元素的次序
reverse_copy()
复制序列时反转元素的次序
环移
rotate()
循环移动元素
rotate_copy()
复制序列时循环移动元素
随机
random_shuffle()
采用均匀分布来随机移动元素
划分
partition()
将满足某谓词的元素都放到前面
stable_partition()
将满足某谓词的元素都放到前面并维持原顺序
 
序列排序及相关操作(27个)
排序
sort()
以很好的平均效率排序
stable_sort()
排序,并维持相同元素的原有顺序
partial_sort()
将序列的前一部分排好序
partial_sort_copy()
复制的同时将序列的前一部分排好序
第n个元素
nth_element()
将第n各元素放到它的正确位置
二分检索
lower_bound()
找到大于等于某值的第一次出现
upper_bound()
找到大于某值的第一次出现
equal_range()
找到(在不破坏顺序的前提下)可插入给定值的最大范围
binary_search()
在有序序列中确定给定元素是否存在
归并
merge()
归并两个有序序列
inplace_merge()
归并两个接续的有序序列
有序结构上的集合操作
includes()
一序列为另一序列的子序列时为真
set_union()
构造两个集合的有序并集
set_intersection()
构造两个集合的有序交集
set_difference()
构造两个集合的有序差集
set_symmetric_difference()
构造两个集合的有序对称差集(并-交)
堆操作
push_heap()
向堆中加入元素
pop_heap()
从堆中弹出元素
make_heap()
从序列构造堆
sort_heap()
给堆排序
最大和最小
min()
两个值中较小的
max()
两个值中较大的
min_element()
序列中的最小元素
max_element()
序列中的最大元素
词典比较
lexicographical_compare()
两个序列按字典序的第一个在前
排列生成器
next_permutation()
按字典序的下一个排列
prev_permutation()
按字典序的前一个排列

 
原文地址:http://blog.csdn.net/touzani/archive/2007/06/08/1643903.aspx

 

修改算法:
算法
用法
说明
copy
OutIt copy(InIt first,InIt last,OutIt x);
将[first,last)之间的元素复制到x指定的位置
copy_backward
BidIt2 copy_backward(BidIt1 first,BidIt1 last,BidIt2 x);
将[first,last)之间的元素复制到x指定位置的前面
fill
void fill(FwdIt first,FwdIt last,const T& x);
将[first,last)之间的部分用元素x填充
fill_n
void fill_n(OutIt first, Size n,const T& x);
从first开始向容器中填充n个元素x
generate
void generate(FwdIt first,FwdIt last, Gen g);
调用函数g()填充[first,last)之间的元素
generate_n
void generate_n(OutIt first,size n, Gen g);
调用函数g()填充从first开始的n个元素
remove
FwdIt remove(FwdIt first,FwdIt last,const T& val);
从[first,last)中删除元素val,返回新区间中最后一个元素后的位置
remove_if
FwdIt remove_if(FwdIt first,FwdIt last, Pred pr);
从[first,last)中删除所有能使函数pr返回true的元素,返回新区间最后一个元素后的位置
remove_copy
OutIt remove_copy(InIt first,InIt last,OutIt x,const T& val);
从[first,last)中删除元素val,并把其余的元素复制到x开始的区间中,返回被拷贝的最后一个元素的位置
remover_copy_if
OutIt remove_copy_if(InIt first,InIt last,OutIt x,Pred pr);
从[first,last)中删除所有能使函数pr返回true的元素,并把其余元素复制到x开始的空间,返回被拷贝最后一个元素的位置
replace
void replace(FwdIt first,FwdIt last,const T& vold,const T& vnew);
用vnew替换[first,last)中所有值为vold的元素
replace_if
void replace_if(FwdIt first,FwdIt last,Pred pr,const T& val);
用val替换[first,last)中所有能使函数pr返回true的元素
replace_copy
OutIt replace_copy(InIt first,InIt last,OutIt x,const T& vold,const T& vnew);
把[first,last)中的所有元素复制到以x开始的空间中,如果拷贝的元素中存在值为vold的元素,则以vnew替换,返回拷贝到目标容器的最后一个元素的后一个位置
replace_copy_if
OutIt replace_copy_if(InIt first,InIt last,OutIt x,Pred pr,const T& val);
把[first,last)中的所有元素复制到以x开始的空间中,如果拷贝的元素中存在能够使函数pr返回true的元素,则以vnew替换,返回拷贝到目标容器的最后一个元素的后一个位置
swap
void swap(Container &c1,Container &c2);
交换容器c1与c2的元素
iter_swap
void iter_swap(FwdIt1 x,FwdIt2 y);
交换迭代器x,y所指元素的值
swap_ranges
FwdIt2 swap_ranges(FwdIt1 first,FwdIt1 last,FwdIt2 x);
用起始于x的连续元素交换区间[first,last)的所有元素,返回第二个区间的最后一个元素的下一个位置
sort
void sort(RanIt first, RanIt last);
void sort(RanIt first, RanIt last, Pred pr);
将区间[first,last)中的元素按升序排序,第二种形式pr用于设定比较函数
merge
OutIt merge(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x);
OutIt merge(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x, Pred pr);
合并两个有序区间[first1,last1)和[first2,last2),并将合并后的元素存储到x开始的容器里,第二种形式pr(elem1,elem2)指定比较规则
inplace_merge
void inplace_merge(BidIt first, BidIt middle, BidIt last);
void inplace_merge(BidIt first, BidIt middle, BidIt last, Pred pr);
合并区间[first,middle)和[middle,last),并将合并后的元素存储到first开始的区间,第二种形式pr(elem1,elem2)指定比较规则
reverse
void reverse(BidIt first, BidIt last);
将区间[first,last)的元素顺序倒置
reverse_copy
OutIt reverse_copy(BidIt first, BidIt last,OutIt x);
将区间[first,last)的元素拷贝到x开始的区间,导致拷贝的元素顺序,源区间没有被修改,返回拷贝到目标区间的最后一个元素的下一个位置
rotate
void rotate(FwdIt first,FwdIt middle,FwdIt last);
交换区间[first,middle)和[middle,last)的元素位置
rotate_copy
OutIt rotate_copy(FwdIt first,FwdIt middle,FwdIt last,OutIt x);
将区间[first,last)的元素拷贝到x开始的容器中,拷贝时交换[first,middle)和[middle,last)的位置,源区间不发生修改,返回拷贝到目标区间的最后一个元素的下一位
random_shuffle
void random_shuffle(RanIt first, RanIt last);
void random_shuffle(RanIt first, RanIt last, Fun& f);
对区间[first,last)上的元素进行随机排序,f用于指定排序函数
transform
OutIt transform(InIt first,InIt last,OutIt x, Unop uop);
对区间[first,last)上的所有元素执行uop(elem)操作,结果放到以x开始的区间内,返回拷贝到目标端的最后一个元素的下一位
transform
OutIt transform(InIt1 first1,InIt1 last1,InIt2 first2,OutIt x, Binop bop);
对区间[first1,last1)和以first2开始的区间的元素执行二元运算bop(elem1,elem2),结果放到以x开始的区间内,返回拷贝到目标端的最后一个元素的下一位
set_itersection
OutIt set_intersection(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x);
OutIt set_intersection(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x, Pred pr);
求两个区间[first1,last1),[first2,last2)的交集,存储到x开始的容器里,源区间元素没有被修改,pr用于指定操作函数,返回拷贝到目标区间的最后一个元素的下一个位置
set_union
OutIt set_union(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x);
OutIt set_union(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x, Pred pr);
求两个区间[first1,last1),[first2,last2)的并集,存储到x开始的容器里,源区间元素没有修改,pr用于指定操作函数,返回拷贝到目标区间的最后一个元素的下一位
set_difference
OutIt set_difference(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x);
OutIt set_difference(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x, Pred pr);
求两个集合[first1,last1),[first2,last2)的差集,存储到x开始的容器里,源区间元素没有被修改,pr用于指定操作函数,返回拷贝到目标区间的最后一个元素的下一个位置
set_symmetric_
difference
OutIt set_symmetric_difference(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x);
OutIt set_symmetric_difference(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x, Pred pr);
求集合[first1,last1),[first2,last2)的对称差(即(A-B)+(B-A)),存储到x开始的容器里,源区间元素没有被修改,pr用于指定操作函数,返回拷贝到目标区间最后一个元素的下一个位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值