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
本文作者:xqy2003
本文链接:https://www.cnblogs.com/xqy2003/p/17519225.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
蒟蒻一枚 坐标山西大学
欢迎你的到来(??);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步