Lambda表达式

Lambda表达式

Background

在力扣做这道周赛题根据第 K 场考试的分数排序,我一开始用了呆呆的方法:

// sort按照第一个数字排序-> 先把第k列放到第一个,再sort,再把第k列放回原来的位置
for(int i=0;i<score.size();i++){
	swap(score[i][0],score[i][k]);
}
sort(score.begin(),score.end());
// 升序转降序所以要reverse一下
reverse(score.begin(),score.end());
for(int i=0;i<score.size();i++){
	swap(score[i][0],score[i][k]);
}

但是其实可以一行到位:

sort(score.begin(), score.end(),[k](vector<int>& a, vector<int>& b) {return a[k] > b[k];});

sort函数里的第三个参数,我看到过很多次,但一直没有懂是什么东西,所以一直用不来。
今天决定查一下,发现是Lambda表达式,准备来理一下相关的知识点。

Overview

C++程序设计语言里对Lambda表达式的定义是:它是定义和使用匿名函数对象的一种简便的方式……
大概来说,就是提供了一个简单的方法,便于我们把操作作为实参传给函数。
一条lambda表达式会包含一下部分:

[capture-list](parameter list)mutable->return_type{body}
  • capture list: 可能为空,指明定义环境中哪些名字能被用在lambda表达式内
  • parameter list: 可选的参数列表,指明lambda表达式需要的参数;
  • mutable: 可选的修饰符,指明该lambda表达式可能会修改自身的状态(不是很懂,也不是很常用的修饰符);
  • noexcept: 可选的修饰符;
  • -> return_type: 声明返回类型;
  • body: 表明了lambda表达式要执行的部分。

Usage

空捕获列表(不需要使用lambda表达式外层的变量):

void algo(vector<int>& v){
	sort(v.begin(), v.end()); // ascending order by default
	
	sort(v.begin(), v.end(), [](int x, int y){return abs(x) < abs(y);}); // ascending order by absolute value
	
}

非空捕获列表:

void f(vector<int>& v){
	bool sensitive = true;
	sort(v.begin(), v.end(), [sensitive](int x, int y){ return sensitive ? x<y : abs(x)<abs(y);}  );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值