算法中所用的lambda表达式 | vegeone
0%

算法中所用的lambda表达式

lambda表达式的理解

lambda表达式的具体定义可以去网上找,我对它的理解就是将一个函数以更简洁的方式,以表达式的形式内嵌在某个函数中。

lambda表达式的应用场景

lambda表达式最常用的是在sort函数中,把cmp函数以lambda表达式直接写在内部,代码如下:

1
2
3
sort(a.begin(),a.end(),[&](int x,int y){//此排序采用降序排序
return x>y;
});

等价于

1
2
3
4
bool cmp(int x,int y){
return x>y;
}
sort(a.begin(),a.end(),cmp);

如果习惯使用定义全局变量的话,可能很多人都基本不会在算法题里用到lambda表达式,但是像我这种对于多种数据懒得手动清空的人来说,不得不把相关变量都定义在solve函数内部,因此再不进行传参的情况下果断选择了lambda表达式,以下是常见的lambda函数写法:

1
2
3
auto check=[&](int x){
return x>0;
};

等价于

1
2
3
bool check(int x){
return x>0;
}

对于一种特殊的函数,即需要调用自身的递归函数,写法上稍有变化

1
2
3
4
5
auto dfs=[&](auto &self,int x)-> int {
if(x>0) return self(self,x-1)+1;
else return 1;
};
dfs(dfs,x);

其中self和x一样都是随便取的名字,非强制要求,但一个都得要有一个参数代表函数自身。

注意事项

  1. 注意lambda表达式依然只是一个表达式,每个lamda表达最后要记得跟上一个“;”

  2. 递归函数中“->”后的数据类型需要用空格隔开