C++泛型算法总结

1

accumulate(b,e,T) 累和(基础和为T)
注意T的类型必须和序列中元素类型相同,如double序列后面的T就必须是0.0,如果是0就会把序列中的数当成int进行求和

2

count(b,e,T) 计数,查找[b,e)中T出现的次数

3

equal(b1,e1,b2) 确定是否相同,[b1,e1)为序列1,b2为序列2开头
默认b2序列长度比b1到e1要长

4

fill(b,e,T) 将[b,e)元素全部替换为T

fill_n(b,N,T) 将b开始的N个元素替换为T
默认从b开始还有不小于N个元素,否则出错!

5

copy(b1,e1,b2) 将b1到e1的元素复制到b2开始序列中去,返回b2复制的最后一个元素的下一个位置迭代器
注意b2开始也要有足够长的数据,否则出错!

6

replace(b,e,T1,T2) 将b到e区间内等于T1的值都改为T2,改变原序列
replace_copy(b1,e1,b2,T1,T2) 相比replace不改变原序列,而是在b2后复制b1到e1并做相应替换

7

sort(b,e) 排序
auto iter=unique(b,e) 把出现超过一次的放到序列末尾,返回冗余尾子串的开头
erase(iter,e) 删除尾部的冗余序列,完成去重

sort可以加谓词参数以使用自定义规则进行排序
sort(b,e,F)

stable_sort(b,e) 稳定排序,相同元素保留原先顺序不变

8

for_each(b,e,F) 对于b到e每个元素调用F函数(如果F的参数是引用就可以改动b到e的值),F可以是lambda表达式

transform(b1,e1,b2,F) 对于b1到e1每个元素都用F转换并顺序存入b2开始的位置 (b2可以等于b1,此时函数效果相当于上面的for_each(b1,e1,F)了),F可以是lambda表达式

lambda匿名表达式:
[捕获列表] (参数) ->return type {函数体}
其中[捕获列表]和{函数体}必须有,其他可以省略。
捕获列表一定是lambda表达式存在的函数中的局部非static变量或者所在函数的形参
因为lambda表达式可以直接使用局部static、全局、函数之外的名字。

显式捕获:捕获的局部非static变量写在参数()里,加&就代表捕获引用,否则捕获的是拷贝。
隐式捕获:(=)或(&) ,即告诉编译器函数体里不知道哪来的变量就当做是母函数里的。
= 代表函数体中的未知变量是从母函数捕获的拷贝
& 代表函数体中的未知变量是从母函数捕获的引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值