STL算法库:#include
lambda表达式:使用内嵌匿名函数,不必编写独立函数
[捕捉块] (参数) (可选mutable等) ->return_type{body}
mutable将调用标记为非const,如果不加,则不能修改捕捉的参数值;
return_type指定返回值的类型,如果忽略,编译器会进行推断;
[]开始,可以接受参数,可以返回值;auto return=[](int a,int b){return a+b;}
[]称为捕捉块,可以在作用域中捕捉变量,表示可以在lambda表达式体中使用该变量,也可以按引用捕捉;
[=]:通过值捕捉所有变量;[&]:通过引用捕捉所有变量;
function
这样,可以将封装与lambda表达式结合起来,实现lambda表达式做为返回值、lambda表达式作为函数参数等;
泛型算法是建立在迭代器之上的,不依赖于容器,也不会执行容器的操作。
不修改序列算法
1.搜索算法
(1)find(),需要传入三个参数:起点迭代器、终点迭代器、查找的值
返回迭代器(找到的点对应的位置,如果未找到,值为end())
(2)find_if(),find_if_not()接受函数回调(或者是lambda表达式等等)作为第三个参数,返回满足条件的位置
(3)auto res=minmax_element(beginIter,endIter)//*(res.first)为最小,*(res.second)为最大
min_element/max_element(beginIter,endIter)返回对应值得迭代器
(4)adjacent_find(beginIter,endIter)返回第一对相邻相等值的迭代器
2.比较算法
(1)equal(),所有对应位置参数相等,则返回true,要求两个容器数目相同
equal(container1.begin(),container1.end(),container2.begin())
(2)mismatch(),返回多个迭代器集合,表示范围中对应的不匹配的元素
auto miss=mismatch(container1.begin(),container1.end(),container2.begin())
(3)lexicographical_compare()可以处理元素个数不相等的情况,第一个不相等的前者较小或者前者个数少返回真
lexicographical_compare(container1.begin(),container1.end(),container2.begin(),container2.end())
3.工具算法
(1)all_of(container.begin(),container.end(),lambda表达式)判断是否全部满足条件
(2)any_of(container.begin(),container.end(),lambda表达式)判断是否至少有一个满足条件
(3)none_of(container.begin(),container.end(),lambda表达式)判断是否全部不满足条件
(4)count_if(container.begin(),container.end(),lambda表达式)返回满足条件的个数
修改序列算法
1.转换transform(源开始,源结束,目标开始,目标结束,回调函数)
如果希望原地转换,则源和目标范围可以是一样的
二元回调:transform(源1开始,源1结束,源2开始,结果首迭代器,回调函数)
2.复制copy(源开始,源结束,目标开始)
范围必须不同,但可以重叠
copy_backward(源开始,源结束,目标开始)可以实现反向复制
3.移动move(源开始,源结束,目标开始)
move_backward(源开始,源结束,目标开始)
4.替换replace(开始点,结束点,oldvalue,newvalue) 将范围内的老值换成新值
replace_if(开始点,结束点,lambda表达式,value)将范围内满足条件的值换成新值
5.删除remove(开始点,结束点,lambda表达式)
6.唯一化unique(开始点,结束点) 删除重复的值
7.反转reverse(开始点,结束点) 就地反转
操作算法
for_each(开始点,结束点,回调函数){函数体}对每一个点执行回调函数
分区算法
partition_copy(源开始,源结束,目标1开始,目标2开始,真值lambda表达式)
根据lambda表达式的返回值将源容器中的值复制到两个目标容器当中;
算法的返回结果是一对迭代器,第一个指向目标1最后元素的后一个位置,第二个指向目标2最后元素后一个位置
partition(开始点,结束点,真值lambda表达式)
根据表达式值将container分成两部分true在前面(快排里面有利用)
排序算法
只能应用于顺序容器
sort(开始点,结束点)也可以指定一个比较回调,默认operator<(递增)
数值处理算法
1.accumulate(开始点,结束点,初始值,操作回调)#include
计算容器中所有元素的总和或者其他算术值
2.inner_product(容器1开始点,容器1结束点,容器2开始点,0)计算两个序列的内积 #include
3.iota(开始点,结束点,给定值)生成一个指定范围内的序列值,从给定值开始,按递增的方式#include