一,lambda表达式
1.基本概念
lambda表达式是从C++11开始引入的,主要用来定义匿名函数和闭包。lambda表达式可以被当作一个值赋给另一个变量,也可以作为实参传递给其他函数,或者作为其他函数的返回结果,用法类似于前面提到的函数对象和函数指针。如果只是把单个函数拿来传参,lambda表达式的使用方式比函数指针和函数对象更简洁。
lambda表达式可以不指定函数的返回类型,编译器将自动推导该类型。
lambda表达式的完整公式:
[capture_list](parameter_list) mutable -> return_type{ process code };
具体含义:
[]: lambda表达式的引出符,编译器根据该符号判断接下来的代码是否为lambda匿名函数。
parameter_list: 参数列表,与普通函数的参数列表一致。如果不需要传递参数,则可以省略该部分以及小括号()。
mutable: 使用了mutable修饰符的lambda表达式,不可以省略参数列表。
return_type: 函数返回值类型。该部分可以连同"->"一起省略。
process code: 函数体,它除了可以使用参数之外,还可以使用捕获到的变量。
lambda表达式样例:
[](int x, int y){return x<y;} //[]用来标记lambda表达式的开始
[](int x=0, int y=0){return x<y;} //传默认实参x=0,C++14标准开始支持
[]{return true;} //没有参数时,可以省略圆括号()
[](int x, int y)->bool{return x<y;} //显式指定返回值类型,让代码更清晰
注意,lambda表达式中的"[ ]"不一定是空的,里面可以包含捕获子句,捕获子句用来捕获上下文中的变量来提供给lambda表达式使用。
C++代码样例:
Demo1:
#include<iostream>
using namespace std;
i