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

【学习笔记】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.lryc.cn/news/2403887.html

相关文章:

  • 学习笔记(26):线性代数-张量的降维求和,简单示例
  • 以智能管理为基础,楼宇自控打造建筑碳中和新路径
  • 81 实战一:给root目录扩容
  • 1130 - Host ‘xxx.x.xx.xxx‘is not allowed to connect to this MySQL server
  • HttpURLConnection实现
  • day029-Shell自动化编程-计算与while循环
  • Linux命令基础(2)
  • vue3 + vite实现动态路由,并进行vuex持久化设计
  • ThingsCloud事物云平台搭建-微信小程序
  • 为什么 uni-app 开发的 App 没有明显出现屏幕适配问题Flutter 开发的 App 出现了屏幕适配问题
  • 学习路之php--性能优化
  • GC1808:高性能24位立体声音频ADC芯片解析
  • echarts使用graph、lines实现拓扑,可以拖动增加effect效果
  • 产品经理课程(九)
  • 二.单例模式‌
  • 从零开始开发纯血鸿蒙应用之网络检测
  • 向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘
  • 接IT方案编写(PPT/WORD)、业务架构设计、投标任务
  • PostgreSQL 的扩展pageinspect
  • Unity——QFramework框架 内置工具
  • 【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作
  • 股指期货波动一个点多少钱?
  • Kafka 快速上手:安装部署与 HelloWorld 实践(一)
  • NGINX `ngx_stream_core_module` 模块概览
  • iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform
  • 探索C++标准模板库(STL):String接口的底层实现(下篇)
  • Flutter知识点汇总
  • vue组件的data为什么是函数?
  • AI图片售卖:是暴利新风口还是虚幻泡沫?哪些平台适合售卖AI图片
  • ​线性注意力 vs. 传统注意力:效率与表达的博弈新解