转载请注明,来自:http://blog.csdn.net/skymanwu
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
vector<function<int(int)>> v;
// lambda使用function封装
function<int(int)> f1(int k)
{
return function<int(int)>([=](int x) -> int
{
if(x > k)
return 1;
else if(x == k)
return 0;
else
return -1;
});
}
// 要使用lambda表达式作为参数,需用函数模版
template<typename Lambda>
void f2(Lambda l, int i)
{
cout<< l(i) <<endl;
}
int main()
{
auto g = f1(10);
v.push_back(g);
for(vector<function<int(int)>>::iterator iter = v.begin(); iter != v.end(); ++iter)
{
cout << (*iter)(9) << endl;
cout << (*iter)(10) << endl;
cout << (*iter)(11) << endl;
}
int k = 10;
auto lambda = [=](int x) -> int
{
if(x > k)
return 1;
else if(x == k)
return 0;
else
return -1;
};
k = 6;
f2(lambda, 8);
return 0;
}
输出结果:
-1
0
1
-1
lambda 引入符:
1. [] //不捕获任何外部变量
2. [=] //以值的形式捕获所有外部变量
3. [&] //以引用形式捕获所有外部变量
4. [x, &y] //x以传值形式捕获,y以引用形式捕获
5. [=, &z] //z以引用形式捕获,其余变量以传值形式捕获
6. [&, x] //x以值的形式捕获,其余变量以引用形式捕获
例如上面的代码中,将“auto lambda = [=](int x) -> int”中的“=”改为"&",则k就是引用捕获,运行返回值则为1。