额外单独写一篇这个是因为发现leetcode的大多数题解都喜欢使用这个语法,故再单独回顾一下。
demo 1:有关“值方式捕获”[=] //值的方式捕获(不会同步到外部变量)
auto f = [=](int a, int b) -> int {
cout << x << endl; // [=]是定义外部的变量是如何访问的(访问本身or拷贝本)
x = 666; // 直接报错,不允许修改
return a + b; // 这里x只会是定义f的那一刻的x的值,在后面修改x不会影响到f中的x值
};
f(2, 5); // 输出0
x = 10;
f(2, 4); // 输出0
demo 2: 有关“引用方式捕获”[&] //引用的方式捕获(会同步到外部变量)
auto f = [&](int a, int b) -> int {
cout << x << endl;
x = 666;
return a + b;
};
f(2, 5); // 输出0
cout << x << endl; // 输出666
x = 10;
f(2, 4); // 输出10
demo 3:几种等价的使用方法
int x = 0;
function<int(int, int)> f1 = [&](int a, int b) -> int {
return a + b + x;
}; // 需要包含头文件<functional>
int (*f2)(int, int) = [=](int a, int b){
return a - b;
};
auto f3 = [](int a, int b){
return a > b;
};
cout << [](int a, int b){return a < b; }(1, 4) << endl;
demo 4:实战,sort的排序准则采用匿名函数
Reference:
[1]shellmad-10_C++新特性 lambda表达式与匿名函数_哔哩哔哩_bilibili
[2]自己在学习过程中记录的博客Day19:C++STL迭代器/Lambda表达式/仿函数/函数适配器和包装器_c++迭代器拉姆达输出-CSDN博客https://blog.csdn.net/zjjaibc/article/details/125495513