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

【学习笔记】Lamba表达式[匿名函数]

【学习笔记】Lamba表达式[匿名函数]

  • Lamba表达式格式
  • 函数模板
  • Lamba表达式例子

Lamba表达式格式

格式:

	[捕获列表](参数列表) -> 返回类型 { 函数体 }

1、捕获列表:指定如何访问外部变量(如 [&x] 引用捕获,[x] 值捕获)。
2、参数列表:与普通函数的参数相同。
3、返回类型:可省略(编译器自动推导),或用 -> int 显式指定。
4、函数体:实现具体逻辑。

函数模板

lamba表达式一般和函数模板配套使用,需要提前了解。
函数模板允许编写与类型无关的通用代码,提高代码复用性和灵活性。

template <typename T>  // 声明模板参数 T
T max(T a, T b) {return a > b ? a : b;
}
int a = 10, b = 20;
int result1 = max(a, b);  // 自动推导 T 为 intdouble x = 3.14, y = 2.71;
double result2 = max(x, y);  // 自动推导 T 为 double

Lamba表达式例子

#include <iostream>
#include <vector>
#include <string>// 水果类
struct Fruit {std::string name;double price;
};// 篮子类:管理水果列表
class FruitBasket {
private:std::vector<Fruit> fruits;public:// 模板函数:遍历水果并执行操作template <typename Function>void forEachFruit(Function action) {for (auto& fruit : fruits) {action(fruit);  // 对每个水果执行传入的操作}}// 添加水果void addFruit(const std::string& name, double price) {fruits.push_back({name, price});}
};int main() {FruitBasket basket;basket.addFruit("苹果", 5.99);basket.addFruit("香蕉", 3.99);basket.addFruit("草莓", 8.99);// 使用 lambda 表达式打印所有水果名称basket.forEachFruit([](const Fruit& fruit) {std::cout << "水果:" << fruit.name << ",价格:" << fruit.price << " 元" << std::endl;});// 使用 lambda 表达式计算总价(捕获外部变量 total)double total = 0.0;basket.forEachFruit([&total](const Fruit& fruit) {total += fruit.price;});std::cout << "总价:" << total << " 元" << std::endl;return 0;
}

代码中的lamba表达式:你可以理解为代码中的函数模板action就是下面的lamba表达式。传入的fruit可以理解为形参。

[](const Fruit& fruit) {std::cout << "水果:" << fruit.name << ",价格:" << fruit.price << " 元" << std::endl;}
[&total](const Fruit& fruit) {total += fruit.price;}
http://www.xdnf.cn/news/892243.html

相关文章:

  • 搜索子字符串的思路与算法分享
  • 类似东郊到家app系统源码开发
  • 《神经渲染变局:高斯泼溅能否改写NeRF规则》
  • 【强化学习】——03 Model-Free RL之基于价值的强化学习
  • hbase资源和数据权限控制
  • 经典算法:回文链表
  • 开发在线问诊APP要注意什么?互联网医院系统源码、功能、合规全详解
  • MATLAB仿真:偏振光在光纤通信中的应用研究_可复现,有问题请联系博主
  • RocketMQ基础概念的理解
  • 28. Revit API:尺寸标注(Dimension)
  • C++STL-vector的使用
  • 非隔离电源方案
  • 【信息系统项目管理师-选择真题】2025上半年(第一批)综合知识答案和详解
  • 【Python训练营打卡】day44 @浙大疏锦行
  • 【PhysUnits】15.15 变量类型(variable.rs)
  • 前端没有“秦始皇“,但可以做跨端的王[特殊字符]
  • 驭码CodeRider 2.0 产品体验 — 搭建邮件服务
  • Web前端之原生表格动态复杂合并行、Vue
  • 农田水利如何「聪明」起来?Modbus转Ethernet IP破解设备互联
  • C语言| 指针在数组中的移动
  • qt ui 转python
  • 三维GIS开发cesium智慧地铁教程(3)entity实体
  • 岩石三轴试验机
  • Spring Boot-面试题(52)
  • 每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
  • JS深入学习 — 循环、函数、数组、字符串、Date对象,Math对象
  • 前端面试四之Fetch API同步和异步
  • c++算法学习3——深度优先搜索
  • 【java面试】框架篇
  • snprintf函数用法及注意事项详解