lambda函数
基本形式

例子 :
int a = 1 ;
auto f = [&](int x,int y) -> int { //也可以将 "-> int"去除 , 加 auto 之后会自己判断类型
return x + y + a;
}
f(1 , 2) ; // 4
[&] : 所有封闭范围内的变量 , 引用捕获 , 可以修改 (在函数定义之前)
[=] : 所有封闭范围内的变量 , 按值捕获 , 不可以修改
递归的两种形式
lambda 函数在形式上不能自己调用自己 , 所以需要特殊的写法引用
function 函数
std::function<void(int,int)> dfs = [&](int x,int fa) {
int cnt = 0;
for(auto y : adj[x]) {
if(y == fa) continue;
++cnt;
dfs(y , x);
leaf[x] += leaf[y];
}
if(!cnt) leaf[x] = 1;
};
//注意此时就没有了 " -> 返回类型了 ".
加入"自己"参数
auto dfs = [&](auto self,int x,int fa) -> void { //有 " -> 返回类型了 "
int cnt = 0;
for(auto y : adj[x]){
if(y == fa) continue;
++cnt;
self(self , y , x); //注意这里是 "self"
leaf[x] += leaf[y];
}
if(!cnt) leaf[x] = 1;
};
lambda 中调用 lambda
auto is_prime = [&](int x) {
if(x == 1) return false;
for(int i = 2 ; i * i <= x; ++i)
if(x % i == 0) return false;
return true;
} ;
auto func = [&](int n) {
for(int i = 1 ; i <= n ; ++i)
if(is_prime(i)) std::cout << i << ' ';
} ;
func(20); //2 3 5 7 11 13 17 19

浙公网安备 33010602011771号