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

【C++篇】C++11:lambda表达式

在C++之前,如果想对一个数据集合中的元素进行排序,可以用std::sort方法:

  • 对于内置类型数据排序,直接使用即可
  • 但对于自定义类型,需要我们自己定义排序规则

排序规则定义方法:

  • 函数指针:void(*ptr)(int x),用起来复杂难读,能不用就不用
  • 仿函数(常用):定义一个类,重载operator(),使得对象可以像函数一样使用

仿函数定义排序规则如:,

代码语言:javascript

AI代码解释

struct Goods { string _name; // 名字 double _price; // 价格 int _evaluate; // 评价 Goods(const char* str, double price, int evaluate) :_name(str) , _price(price) , _evaluate(evaluate) {} }; //以货物价格排升序 struct ComparePriceLess { bool operator()(const Goods& gl, const Goods& gr) { return gl._price < gr._price; } }; //以货物价格排降序 struct ComparePriceGreater { bool operator()(const Goods& gl, const Goods& gr) { return gl._price > gr._price; } }; int main() { vector<Goods> v = { { "苹果", 2.1, 5 }, { "香蕉", 3, 4 }, { "橙子", 2.2, 3 }, { "菠萝", 1.5, 4 } }; sort(v.begin(), v.end(), ComparePriceLess()); sort(v.begin(), v.end(), ComparePriceGreater()); }

随着C++语法的发展,人们开始觉得上面的写法太复杂了,每次为了实现一个algorithm算法, 都要重新去写一个类,如果每次比较的逻辑不一样,还要去实现多个类,特别是相同类的命名,这些都给编程者带来了极大的不便。因此,在C++11语法中出现了Lambda表达式。

代码语言:javascript

AI代码解释

int main() { vector<Goods> v = { { "苹果", 2.1, 5 }, { "香蕉", 3, 4 }, { "橙子", 2.2, 3 }, { "菠萝", 1.5, 4 } }; sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){ return g1._price < g2._price; }); sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){ return g1._price > g2._price; }); sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){ return g1._evaluate < g2._evaluate; }); sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){ return g1._evaluate > g2._evaluate; }); }

上述代码就是使用C++11中的lambda表达式来解决,可以看出lambda表达式实际是一个匿名函数,在函数内部直接定义使用。对比仿函数,使用lambda表达式可以使得代码更简洁,可读性更好


http://www.jsqmd.com/news/469912/

相关文章:

  • 港科校友| 罗咏丰:以校友导师身份回馈科大
  • 2026创新型企业知识产权维权机构推荐榜:商业竞业限制调查、商业背景调查、商业诋毁调查、知识产权代理、知识产权侵权取证选择指南 - 优质品牌商家
  • 2026年优质镀锌避雷塔行业推荐榜:钢管避雷塔/镀锌监控塔架/防火监控塔架/防雷避雷塔/单管避雷塔/圆钢避雷塔/选择指南 - 优质品牌商家
  • 【C++篇】C++11:右值引用与移动语义
  • 【C++篇】哈希扩展:位图和布隆过滤器+哈希切割
  • 2026年破碎机公司口碑榜:五大热门服务商深度解析 - 2026年企业推荐榜
  • 排队节省40分钟!金仓数据库守护湘江新区百万居民就医路
  • 网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
  • 若依微服务中配置 MySQL + DM 多数据源
  • 解决MySQL8.0报错Client does not support authentication protocol requested by server...问题
  • 2026年烟囱塔优质产品推荐榜:监控铁塔/瞭望监控塔/碳钢烟囱塔/角钢监控塔/道路监控塔/钢管监控塔/镀锌监控塔架/选择指南 - 优质品牌商家
  • 2026优秀可靠门窗品牌推荐:四川门窗品牌/性价比门窗/成都门窗/推拉窗/推拉门/系统门窗/节能门窗/铝合金门窗/选择指南 - 优质品牌商家
  • 2026年评价高的超低温试验箱厂家推荐:高精度-70℃~-180℃超低温试验箱源头厂家推荐 - 品牌宣传支持者
  • 这个 PUA Skill 火了:用阿里/字节的绩效话术逼 Claude 不敢放弃,一言不合打 3.25
  • 解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
  • 2026模块化移动售楼处优质服务商推荐榜:临时售楼处、临时样板间、创意集装箱售楼处、可定制的售楼处、可拆卸售楼处选择指南 - 优质品牌商家
  • 2026年初至今,吉林地区值得信赖的路边石供应商精选 - 2026年企业推荐榜
  • 工业运动控制可靠伦茨伺服品牌推荐指南:科尔摩根电机、科尔摩根直线电机、科尔摩根维修、科尔摩根驱动器、伦茨PLC选择指南 - 优质品牌商家
  • 第二章 Spring中的Bean
  • 聚焦3c电子精密抓取需求,精选2026年高可靠3c电子电爪品牌 - 品牌2026
  • 机器人灵巧手技术与应用场景:助力挑选专业灵巧手品牌 - 品牌2026
  • 为什么RTL总是姗姗来迟?
  • 2026年个性化定制防盗盖供应商推荐指南:试管瓶、进样瓶、避光瓶、酒瓶盖、铝塑盖、铝盖、食品级玻璃瓶、儿童安全盖选择指南 - 优质品牌商家
  • 解决JDK25,IDEA控制台中文乱码问题
  • 如何在 Golang 项目中高效运用 Protocol Buffers
  • 2026可靠直流充电桩优质产品推荐榜:电动汽车充电桩、重卡充电桩、高功率充电桩、3C国标充电桩、V2G充电桩、快充充电桩选择指南 - 优质品牌商家
  • 2026年出国劳务优质服务推荐榜正规资质权益保障:出国劳务哪里工资高、劳务输出公司出国务工、劳务输出出国务工、正规出国务工机构选择指南 - 优质品牌商家
  • 2026政企办公优质会议电子门牌推荐榜:人员去向电子牌、塑胶电子门牌、学校兑换柜、学生积分兑换柜、安全积分兑换柜选择指南 - 优质品牌商家
  • NGA-BBS-Script:论坛界面优化与浏览效率提升工具——如何通过轻量级配置实现信息获取效率翻倍?
  • 电爪核心技术与选型要点——助力高效优质电爪品牌推荐 - 品牌2026