当前位置: 首页 > 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;}

相关文章:

  • `sendto()` / `recvfrom()` - 发送/接收数据(UDP)
  • this.$set() 的用法详解(Vue响应式系统相关)
  • 基于值函数的强化学习算法之Double Q-Learning详解
  • 示波器电流探头校准规范指南
  • 软考 系统架构设计师系列知识点之杂项集萃(81)
  • nginx 同时支持ipv4与ipv6 配置
  • 【Android基础回顾】五:AMS(Activity Manager Service)
  • 猎板PCB有铜半孔技术:深空探测器的“神经骨架”
  • Git 推送失败解决教程——error: failed to push some refs to
  • 一、ES6-let声明变量【解刨分析最详细】
  • 【Java Web】9.Maven高级
  • 双空间知识蒸馏用于大语言模型
  • 沪铜6月想法
  • 监控硬盘可以当台式机硬盘用吗
  • Jenkins | Jenkins构建成功服务进程关闭问题
  • html文字红色粗体,闪烁渐变动画效果
  • jenkins脚本查看及备份
  • 可视化图解算法48:有效括号序列
  • 板凳-------Mysql cookbook学习 (十)
  • OD 算法题 B卷【BOSS的收入】
  • 娄底网站建设的话术/推广网
  • 装置艺术那个网站做的好/脚本外链平台
  • iis7搭建网站教程/百度广告推广怎么收费
  • 北京建设网站方舟爸爸/百度下载官方下载安装
  • 企业网站cms模板/中视频自媒体平台注册
  • 福建网站开发公司/地推项目平台