当前位置: 首页 > news >正文

匿名函数

竞赛/技巧

C++ 匿名函数 (Lambda 表达式)


#include <bits/stdc++.h>
using namespace std;int main() {vector<int> v = {5, 3, 1, 4, 2};// 基本Lambda格式: [capture\](parameters){bparametersody}sort(v.begin(), v.end(), [](int a, int b) {return a > b;  // 降序排序});for(auto x : v) {printf("%d ", x);  // 输出: 5 4 3 2 1}puts("");// 带捕获列表的Lambdaint base = 100;auto add = [base](int x) { return x + base; };printf("%d\n", add(5));  // 输出105
}

C 语言匿名函数 (GCC扩展)

#include <stdio.h>
#include <stdlib.h>// GCC的嵌套函数扩展 (不是标准C)
void c_style() {int cmp(const void *a, const void *b) {return *(int*)b - *(int*)a;  // 降序排序}int arr[] = {5, 3, 1, 4, 2};qsort(arr, 5, sizeof(int), cmp);for(int i=0; i<5; i++) {printf("%d ", arr[i]);  // 输出: 5 4 3 2 1}puts("");
}int main() {c_style();return 0;
}

主要区别对比表:

特性 C++ Lambda C 嵌套函数(GCC)
标准支持 C++11及以上标准 GCC扩展,非标准C
捕获外部变量 支持([=]/[&]/[a,&b]等) 只能访问外层函数的局部变量
用作回调函数 可以直接传递 需要转换为函数指针
生命周期 可以返回和存储 只能在定义它的函数内使用
典型应用场景 STL算法回调、异步编程等 仅限于当前函数内部使用

你的风格实现建议:


#include <bits/stdc++.h>
using namespace std;int main() {// 1. 简单Lambda - 排序int arr[] = {3,1,4,5,9,2,6};sort(arr, arr+7, [](int a, int b){return a > b;  // 降序});// 2. 带捕获的Lambda - 计算int k = 10;auto func = [k](int x) {printf("%d\n", x + k);};func(5);  // 输出15// 3. 在STL算法中使用vector<int> v = {5,3,1,4,2};for_each(v.begin(), v.end(), [](int x){printf("%d ", x);});
}

注意事项:

  1. C++ Lambda是真正的闭包,可以捕获外部变量

  2. C的嵌套函数只是语法糖,实际还是普通函数

  3. 在工程代码中,C++推荐用Lambda,C语言建议用普通函数

  4. Lambda的捕获列表:

    • [=] 值捕获

    • [&] 引用捕获

    • [a,&b] 混合捕获

http://www.hskmm.com/?act=detail&tid=15935

相关文章:

  • HarmonyOS资源管理与访问:多分辨率与多语言适配
  • 面试官:为什么没有虚拟线程池?
  • 润生软件简介:以“重构与共生”引领商业未来
  • Python 并发编程
  • 安装pyautogui时与setuptool时冲突报错-module setuptools.dist has no attribute check_test_suite
  • 统计机器学习经典分类算法MATLAB实现
  • 从安装到中文界面,一文带你玩转 DaVinci Resolve 20(零基础也能搞定)
  • 靶场1
  • 299、已凉
  • linux手动安装阿里云Logtail采集Nginx访问日志
  • WPF的数据绑定之通知修改
  • 古代史
  • matlab运行时遇到的license问题
  • HarmonyOS 5.0+ 安全加密与数据存储最佳实践指南
  • EV论文修改工作
  • HarmonyOS之设备硬件能力调用:传感器、蓝牙与定位
  • 基于HarmonyOS SDK开放能力的微博社交体验构建实践
  • web三维
  • HarmonyOS 多线程编程:Worker 使用与性能优化指南
  • 质数(埃氏筛、欧拉筛)
  • HarmonyOS数据持久化:Preferences轻量级存储实战
  • HarmonyOS服务卡片开发:动态卡片与数据绑定实战指南
  • 有理数类的问题回答
  • HarmonyOS后台任务调度:JobScheduler与WorkManager实战指南
  • 总线传输的四个阶段
  • HarmonyOS事件订阅与通知:后台事件处理
  • HarmonyOS后台任务管理:短时与长时任务实战指南
  • Kali Linux 2025.3 发布 (Vagrant Nexmon) - 领先的渗透测试发行版
  • C语言多线程同步详解:从互斥锁到条件变量
  • Browser Use调用浏览器入门