lambda表达式
[]标识符 表示一个Lambda的开始 必须存在 不能省略
()参数
{}实现体
lambda表达式作用是什么
用于定义并创建匿名的函数对象
例子
最简单的使用 lambda表达式会自动判断返回值
末尾的(9)会被赋值在(int x)的x上 所以输出9
[](int x) {cout << x << endl;return 0 } (9);//9
用自动类型 也就是函数指针接收这个lambda表达式
这样就可以简单实现函数 不需要再顶部重新定义一个
auto b = [](int x) {cout << x << endl; };
b(5);//5
用function接受lambda表达式
int a = 1;
int b = 2;
function<void(int, int)> dfs = [&](int index, int steps)
dfs(a,b);
值传递
int a = 0;
auto b = [a]() {cout << a << endl; };//只能传入a变量
auto c = [=]() {cout << a << endl; };//所有值都是以值传递的方式传入
//auto b = [a]() {a = 2;cout << a << endl; };//会直接报错
a = 1;
b();//0
会发现输出的是0 也就意味着值是在lambda表达式之后就不会再被传入了 同样在lambda表达式中也不能对a值进行更改
引用传递
指定名字叫a的变量会被引用传入
int a = 0;
auto b = [&a]() {cout << a << endl; };//只有a变量通过引用方式传入
auto c = [&]() {a = 2;cout << a << endl; };//同上所有值都引用方式传入
a = 1;
b();//1
c();//2
混合传递
int a = 0;
int b = 1;
auto c = [&a,b]() {cout << a << endl; cout<<b<<endl;};//a是引用传递 b是值传递 也可以写成[&,b]就是其他都是引用传递 而b是值传递
b = 3;
a = 4;
c();//4,1