首页 > 其他分享 >Lambda表达式(匿名函数)

Lambda表达式(匿名函数)

时间:2024-02-03 14:11:38浏览次数:39  
标签:return 函数 int auto 捕获 匿名 表达式 Lambda

C++11中引入了lambda表达式,定义匿名的内联函数。
我们可以直接原地定义函数而不用再跑到外面去定义函数跳来跳去。
同时在stl的排序上也有作用。

[capture] (parameters) mutable ->return-type {statement}

下面逐一介绍各个参数的含义.
[capture] :

  • 捕获:作用是让匿名函数能够访问或者修改函数外部的变量
  • 有两种一种是值,一种是引用
  • 具体怎么用,我们需要用到某些变量,但是又不想传递参数(或者太多了传递不了参数)就可以通过捕获的方式,如果我们要在lambda表达式中修改这些外面的变量就需要捕获引用,如捕获值,那么这些值则不能改变。

值捕获

void solve()
{
	int a=3,b=2;
	auto change=[=]()
	{
		return a*b;
	};
	cout<<change()<<endl;
}

引用捕获

int a=1,b=2;
auto change=[&]()
{
	a=3;
	b=4;
};
cout<<a<<' '<<b<<endl;
change();
cout<<a<<' '<<b<<endl;
void solve()
{
	auto check=[&](int m)
	{
		rep(i,1,10)	if(i<m)	cout<<i<<' ';
		cout<<endl;
	};
	check(3);
}

parameters:参数

  • 这个没什么需要解释的和正常函数的参数是一样的都是传递的值
    mutable
    利用可变规范,Lambda 表达式的主体可以修改通过值捕获的变量。若使用此关键字,则 parameters 不可省略
void solve()
{
	int a = 0;
	auto func = [a]() mutable 
	{ 
		++a;
		cout<<a<<endl; 
	};
	func();
	cout<<a<<endl;
}

但是修改捕获变量的值不会带到匿名函数外部
image

return-type:就是函数的返回类型,在算法竞赛很多时候我们可以用auto代替

auto lam = [](int a, int b) -> int
{
	return a+b;
}

如果有多种排序规则可以直接用lambda表达式

sort(vec.begin(), vec.end(), [&](PII& a, PII& b) {return a.second > b.second;});

标签:return,函数,int,auto,捕获,匿名,表达式,Lambda
From: https://www.cnblogs.com/cxy8/p/18004614

相关文章

  • 金蝶云星空审核使用了基础资料的属性字段报错:表达式计算出错
    ##报错内容表达式计算出错:F_XXXX_MaterialId.FIsSNManage==trueandF_XXXX_ProductLibraryId==0(基础资料字段F_XXXX_MaterialId没有定义FIsSNManage字段的引用,请修正公式或在此字段中添加其引用。)条件表达式结果转换失败:F_XXXX_MaterialId.FIsSNManage==trueand......
  • C#之linq和lamda表达式GroupBy分组拼接字符串
    业务需求:点击提示信息,如:“售后单【SH001】序列号【001,002,006】;售后单【SH002】序列号【003,007,009】。已经过了质保期,确认要继续关闭吗” 核心代码://lamda表达式varerrorMsgObj=getNoPay.GroupBy(s=>s["FBILLNO"]+"").Select(d=>new{......
  • 正则表达式
    1.正则表达式和EXCESS系统尾数部分使用正则表达式(按照特定的规则来表示数据的形式),可以将表现形式多种的浮点数统一为一种表现形式。如十进制小数0.75就有多种表现形式。为了方便计算机的处理,需要制定一个统一的规则将小数点前面的值固定为1的正则表达式处理方法:指数部分使用......
  • 阻抗建模-dq轴各分量表达式计算方法
    symsw1wpttheta_pllfai_vpfai_vnV1VpVn%直流分量Vd_dc=simplify((2/3)*V1*cos(w1*t)*cos(theta_pll)...+(2/3)*V1*cos(w1*t-2*pi/3)*cos(theta_pll-2*pi/3)...+(2/3)*V1*cos(w1*t+2*pi/3)*cos(theta_pll+2*pi/3))%正序分量**Vd_p=simplify((2/3)*Vp*cos(w......
  • 什么是JavaScript表达式语句?
    JavaScript语法(三):什么是表达式语句?不知道你有没有注意到,我们在语句部分,讲到了很多种语句类型,但是,其实最终产生执行效果的语句不多。事实上,真正能干活的就只有表达式语句,其它语句的作用都是产生各种结构,来控制表达式语句执行,或者改变表达式语句的意义。今天的课程,我们就深入到......
  • Python正则表达式之: (?P<name>…)
    importres="2023-12-2314:34:56|liming|20230789"parren="(?P<time>^\d+-\d+-\d+\s\d+:\d+:\d+)\|(?P<name>[\w]+)\|(?P<number>\d+)$"g=re.search(parren,s)>>>g.groupdict(){'time':'2......
  • AndroidStudio-创建Kotlin匿名内部类时自动补全
    AndroidStudio-创建Kotlin匿名内部类时自动补全用Kotlin写代码,当要创建匿名类实例时,总是要自己手敲出来,不像Java一样,输入new就会有代码提示出来,去网上搜索,大部分都是AndroidStudio按住ctrl+空格键,或者ctrl+alt+空格会出现代码提示,我试了,嗯...好像啥反应也没有,然后发现每次按,输入......
  • node后端中sql使用的表达式和函数
    参考:https://xiaoman.blog.csdn.net/article/details/135903790一.表达式MySQL表达式是一种在MySQL数据库中使用的计算式或逻辑式。它们可用于查询、更新和过滤数据,以及进行条件判断和计算。算术表达式:可以执行基本的数学运算,例如加法、减法、乘法和除法。例如:SELECTcol1+co......
  • 正则表达式底层实现
    1、不考虑分组代码示例publicstaticvoidmain(Stringargs[]){Stringcontent="2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布,几周后其获得了Apple公司MacOSX的工业标准的支持。"+"2001年9月24日,J2EE1.3发布。2002年2月26日,J2SE1.4发布。自此Java的计算能......
  • 为啥一样一样的正则表达式,去提取就提取不出来?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Pandas数据提取的问题。问题如下图所示:大佬们  为啥一样一样的正则表达式 for循环就可以出结果用apply(lambdax:re.findall(pattern,x))去提取就提取不出来?图一:图二:二、实现过......