Lambda表达式
为什么
-
简洁
-
可以实现函数对象局部定义
-
能够捕获作用域中对象
-
在算法中使用方便
是什么
内嵌的匿名函数 定义后自动生成一个匿名类
-
语法
[捕获列表](参数)mutable->int{return}
-
中括号起手,
[=]
捕获全部 -
加上
mutable
可以改变捕获到的参数 -
例:
// 算法中使用 std::vector<int> numbers = { 3, 1, 4, 1, 5, 9, 2, 6 }; sort(numbers.begin(),numbers.end(),[](int a, int b){ return a>b; }); for(int i:numbers) cout<<i<<" "; cout<<endl; // 引用, 是引用外部的 int a = 10;int b = 20; auto lambda_add = [&a,&b](){ a++; return a+b; }; cout<<lambda_add()<<endl; cout<<"a = "<<a<<endl; // 不加引用就是改变生成的对象的值 mutable int v1=42; auto f=[v1] () mutable->int{return v1++; }; v1=0; auto j=f(); //j 为 43 v1 = 100; auto k=f(); //k 为 44 cout<<"j = "<<j<<endl<<"k = "<<k<<endl;
-
输出
``` 9 6 5 4 3 2 1 1 31 a = 11 j = 42 k = 43 ```
-
-