C++匿名函数lambda使用(闭包)

额外单独写一篇这个是因为发现leetcode的大多数题解都喜欢使用这个语法,故再单独回顾一下。

demo 1:有关“值方式捕获”[=]   //值的方式捕获(不会同步到外部变量)

auto f = [=](int a, int b) -> int {
	cout << x << endl;		// [=]是定义外部的变量是如何访问的(访问本身or拷贝本) 
       x = 666;             // 直接报错,不允许修改
	return a + b;			// 这里x只会是定义f的那一刻的x的值,在后面修改x不会影响到f中的x值 
};
f(2, 5);	// 输出0 
x = 10;
f(2, 4);	// 输出0

demo 2: 有关“引用方式捕获”[&]      //引用的方式捕获(会同步到外部变量)

auto f = [&](int a, int b) -> int {	 
		cout << x << endl;				 
		x = 666;
		return a + b;					
	};
f(2, 5);	// 输出0 
cout << x << endl;	// 输出666 
x = 10;
f(2, 4);	// 输出10

demo 3:几种等价的使用方法

int x = 0;
function<int(int, int)> f1 = [&](int a, int b) -> int {
	return a + b + x;
};	// 需要包含头文件<functional> 
int (*f2)(int, int)	= [=](int a, int b){
	return a - b;
};
auto f3 = [](int a, int b){
	return a > b;
};
cout << [](int a, int b){return a < b; }(1, 4) << endl;

demo 4:实战,sort的排序准则采用匿名函数

Reference:

[1]shellmad-10_C++新特性 lambda表达式与匿名函数_哔哩哔哩_bilibili

[2]自己在学习过程中记录的博客Day19:C++STL迭代器/Lambda表达式/仿函数/函数适配器和包装器_c++迭代器拉姆达输出-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zjjaibc/article/details/125495513

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Ocean__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值