C++基础(八)初窥lambda、lambda在STL中应用

lambda表达式是C++11新推出来的一个概念,非常好用,但如同C++的其他知识点一样,坑也很多。

想要比较全面的介绍lambda,放到一篇博客中会比较臃肿,故决定用两篇介绍。本篇重点介绍lambda的简单应用,另一篇着重介绍lambda的坑

进入正题!

lambda可以理解成局部函数,即函数中定义一个函数,与STL算法搭配使用,会极其方便。可以这么说,有了lambda,STL如虎添翼。

但是!lambda也可以定义成全局的,即不在函数内定义。但这种做法有违了lambda的设计初衷,直接用普通函数就好。

其语法格式如下:

[捕获列表] (参数列表) -> 返回值类型 { 函数体 }
其中,仅有“[]{}”是必须的,其他全部可以省略不写。lambda的使用,和函数类似,先要定义,然后调用。

简单的示例代码如下:

auto lam_global = []{std::cout << "全局" << std::endl; };  //函数体外定义的lambda,虽然合法,但不建议这么做,用普通函数即可
int _tmain(int argc, _TCHAR* argv[])
{	
	using namespace std;
	auto lam_empty = []{};  //最简单的Lambda表达式,什么都不做
	auto lam_print = []{cout << "简单lambda" << endl; }; 
	lam_empty();
	lam_print();
	lam_global();
	system("pause");
	return 0;
}

执行结果如下:

上面用的是auto关键字定义的变量名来接受lambda表达式,用函数指针也可以:

	using Fun = void(*)(void);
	Fun fun = []{cout << "yes" << endl; };
	fun();

建议统一用auto,交由编译器完成类型推断!

下面一一解释各部分。

参数列表

1、参数列表和普通函数的参数列表一样,可以是值、引用、const引用等,也是作为形参;

2、如果是非const引用,函数体内部可以修改引用的值;

3、与普通函数不同,lambda表达式的参数不能有默认值。

示例代码如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值