聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

[原]C++ 11学习(1):lambda表达式

2013-08-29 12:00 浏览: 1483921 次 我要评论(0 条) 字号:

转载请注明,来自: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。




网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复