• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

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

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


 

posted @ 2013-08-26 19:24  Class Xman  阅读(233)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3