lambda表达式产生的是未命名的函数对象anonymous functor,类似于inline函数
[capture list] (params list) mutable exception -> rettype { function body }
capture list:捕获外部变量列表(值,引用)
params list:形参列表
mutable指示符:用来说用是否可以修改捕获的变量,使用mutable关键词使函数体内部可以改变捕获的变量值。
exception:异常设定
-> rettype:返回类型
function body:函数体
[]可为空但是不能省略,(params list), mutable exception ,-> rettype 若没有则可以省略
。如果使用mutable关键词则()不能省略。
“不完整”的Lambda表达式,常见的有以下几种:
- [capture list] (params list) -> return type {function body}
- [capture list] (params list) {function body}
- [capture list] {function body}
lambda表达式是一个对象(函数对象)
auto l=[]{ cout<<"hello lambda."; }
l(); //会直接产生输出
eg:
//删除vector中满足一定条件的元素
//删除30到60之间的元素
vector<int> v{22,33,44,55,66,77};
int max=60;
int min=30;
v.erase( remove_if (v.begin(), v.end(), [max, min](int n){return min<n&&n<max}), v.end() );
for(auto i : v)
cout<<i<<" "; //22,66,77