lambda表达式的学习
样例代码:
解析:
- count_if(迭代器a,迭代器b,条件函数),范围为[a,b)
- a.find(b)在string a中寻找string b并返回string::size_type类型的索引,若不存在,则返回string::npos
- string::npos是size_type类型的最大值
- cpp中存在三种方式可以创建/传递一个可以被调用的对象:
函数指针
仿函数(Functor)
Lambda 表达式 - Lambda表达式格式形如:
auto Plus = [](int a, int b) { return a + b; };
[ capture-list ] ( params ) mutable(optional) exception(optional) attribute(optional) -> ret(optional) { body }
- capture-list:捕获列表。前面的例子 auto Plus = [](int a, int b) { return a + b; }; 没有捕获任何变量。
- params:和普通函数一样的参数。
- mutable:只有这个 Lambda 表达式是 mutable 的才允许修改按值捕获的参数。
- exception:异常标识。暂时不必理解。
- attribute:属性标识。暂时不必理解。
- ret:返回值类型,可以省略,让编译器通过 return 语句自动推导。
- body:函数的具体逻辑。
- 函数指针格式:
// 一个指向有两个整型参数,返回值为整型参数的函数指针类型
int (*)(int, int);
// 通常我们用 typedef 来定义函数指针类型的别名方便使用
typedef int (*Plus)(int, int);
// 从 C++11 开始,更推荐使用 using 来定义别名
using Plus = int (*)(int, int);
参考链接:
1.https://blog.csdn.net/Hao_ge_666/article/details/90695409
2.https://blog.csdn.net/lmb1612977696/article/details/81455708
3.https://zhuanlan.zhihu.com/p/150554945