/*********************
data:2018-2-24
1.Lambda表达式完整的声明格式如下:
[capture list] (params list) mutable exception-> return type { function body }
各项具体含义如下
capture list:捕获外部变量列表
params list:形参列表
mutable指示符:用来说用是否可以修改捕获的变量
exception:异常设定
return type:返回类型
function body:函数体
2. 外部变量捕获
a. 值捕获
**********************/
#include <iostream>
#include <algorithm>
//#include <cmatch>
#include <vector>
using namespace std;
//void abssort(float *x, unsigned N)
//{
// std::sort(x,
// x+N,
// [](float a, float b) {return std::abs(a) < std::abs(b); }
// );
//}
bool myCompare(int a, int b)
{
return a < b;
}
int main()
{
vector<int> myVec{ 3, 2, 5, 7, 3, 1 };
vector<int> lbVec(myVec);
sort(myVec.begin(), myVec.end(), myCompare); //①
for (auto iter : myVec)
{
cout << iter << ',';
}
cout << endl;
sort(lbVec.begin(), lbVec.end(), [](int a, int b) {return a < b; }); //② lambda表达式
cout << "lambda expression:" << endl;
for (auto iter : lbVec)
{
cout << iter << ',';
}
cout << endl;
//值捕获
int a = 123;
auto f = [a]{cout <<"aaa=" << a << endl; };
f(); //输出
//引用捕获
int b = 456;
auto f2 = [&b]{cout << "bbb==" << b << endl; };
b = 654;
f2();
//隐式捕获,自动根据函数体的代码来推断需要捕获哪里变量
//隐式捕获有两种方式,分别是[=]和[&]。[=]表示以值捕获的方式捕获外部变量,[&]表示以引用捕获的方式捕获外部变量
int c = 678;
auto f3 = [=]{cout << "cccc==" << c << endl; };
f3();
return 0;
}
c++ lambda
最新推荐文章于 2023-08-21 10:29:06 发布