目录
- lambda形式
- lambda用法
- 1.sort降序
- 2.swap
- 3.捕捉列表
- 习题
- 解题
lambda形式
[capture-list](parameters)->return type{function boby}
- [capture-list]:[捕捉列表]用于捕捉函数外的参数,可以为空,但不能省略;
- (parameters) :(参数列表)和函数参数功能相似,可以为空,可以省略;
- ->return type:返回值类型,可以省略;
- {function boby}:函数体。
lambda用法
1.sort降序
vector<int> v({1,2,3,4,5,6,7,8,9});
sort(v.begin(),v.end(),[](int x,int y){return x<y;});
//打印9 8 7 6 5 4 3 2 1
2.swap
int a=0,b=1;
auto swap=[](int& x,int& y)
{
int tmp=x;
x=y;
y=tmp;
};
swap(a,b);//a=1 b=0
3.捕捉列表
- 捕捉列表内的参数默认被const修饰不可修改(传值捕捉),可以加上&表示传引用捕捉。
- 未被捕捉列表捕捉的参数无法在函数体使用,而全局变量d和静态变量e不被捕捉也能使用。
3.静态变量过多可以采用[=]隐式传值捕捉或[&]隐式传应用捕捉
4. 也可以混合捕捉(a,b是传引用捕捉,其余是传值捕捉)
习题
解题
class Solution {
public:
vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {
int n=nums1.size();
vector<int> index(n);//下标数组
for(int i=0;i<n;i++) index[i]=i;
sort(nums1.begin(),nums1.end());
sort(index.begin(),index.end(),[&](int i,int j){return nums2[i]<nums2[j];});
//lambda
vector<int> tmp(n);
int left=0,right=n-1;
for(int i=0;i<n;i++)
{
if(nums1[i]>nums2[index[left]])
tmp[index[left++]]=nums1[i];//比不过
else
tmp[index[right--]]=nums1[i];
}
return tmp;
}
};