C++ lambda表达式举例

C++ lambda表达式

Lambda表达式是一种简洁的方式来创建匿名函数,可以直接在函数调用的地方定义,主要用于简化代码。

Lambda表达式的基本语法如下:

[capture](parameters) -> return_type {// function body
};

示例1:基本用法

在这个例子中,lambda表达式 [](int n) { std::cout << n << " "; } 被传递给 std::for_each 用来遍历并打印 numbers 中的每个元素。

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};// 使用lambda表达式打印vector中的元素std::for_each(numbers.begin(), numbers.end(), [](int n) {std::cout << n << " ";});std::cout << std::endl;return 0;
}

示例2:捕获变量

Lambda表达式可以通过捕获列表 [capture] 捕获作用域中的变量。捕获方式包括按值捕获和按引用捕获。

#include <iostream>int main() {int a = 10;int b = 20;// 按值捕获a和bauto lambda_value_capture = [a, b]() {std::cout << "Value capture: " << a << ", " << b << std::endl;};lambda_value_capture();// 按引用捕获a和bauto lambda_reference_capture = [&a, &b]() {std::cout << "Reference capture: " << a << ", " << b << std::endl;};lambda_reference_capture();// 修改a和b的值a = 30;b = 40;lambda_value_capture();   // 输出依旧是10, 20,因为是按值捕获lambda_reference_capture(); // 输出是30, 40,因为是按引用捕获return 0;
}

示例3:参数和返回值

Lambda表达式可以接受参数并返回值,参数和返回类型的语法与普通函数类似。

#include <iostream>
#include <functional>int main() {// 带参数和返回值的lambda表达式std::function<int(int, int)> add = [](int x, int y) -> int {return x + y;};int result = add(5, 3);std::cout << "Result: " << result << std::endl; // 输出 Result: 8return 0;
}

示例4:在STL算法中的应用

Lambda表达式经常用于STL算法中,例如 std::sort、std::transform 等。

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {5, 2, 9, 1, 5, 6};// 使用lambda表达式排序std::sort(numbers.begin(), numbers.end(), [](int a, int b) {return a < b;});// 打印排序后的vectorstd::for_each(numbers.begin(), numbers.end(), [](int n) {std::cout << n << " ";});std::cout << std::endl; // 输出 1 2 5 5 6 9return 0;
}

说明

  • 捕获列表 [capture]:指定lambda表达式如何捕获外部变量。可以使用[=]捕获所有变量为值,[&]捕获所有变量为引用。
  • 参数列表 (parameters):与普通函数参数列表一样。
  • 返回类型 -> return_type:指定lambda表达式的返回类型,可省略。
  • 函数体 { // function body }:定义lambda表达式的具体实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式开发十八:USART串口通信实验

上一节我们学习了串口通信的基本理论&#xff0c;串口通信是学习单片机的一个重要的一步&#xff0c;非常重要&#xff0c;这一节我们通过实验来学习串口通信的使用&#xff0c;以及串口的接收中断的使用。 一、发送单个字节uint8_t数据或者字符型数据 实现的功能&#xff1a;…

React@16.x(33)动画(上)

目录 1&#xff0c;Transition一些常用 props1&#xff0c;mountOnEnter2&#xff0c;unmountOnExit3&#xff0c;appear 2&#xff0c;CSSTransition2.1&#xff0c;和 Transition 组件的区别2.2&#xff0c;举例2.3&#xff0c;常用 props2.3.1&#xff0c;classNames2.3.2&a…

【UE数字孪生学习笔记】 Apifox一体化接口测试平台

声明&#xff1a;部分内容来自于b站&#xff0c;知乎&#xff0c;慕课&#xff0c;公开课等的课件&#xff0c;仅供学习使用。如有问题&#xff0c;请联系删除。 部分内容来自UE官方文档&#xff0c;博客等 Apifox接口测试 Apifox 是集 API 文档、API 调试、API Mock、API 自动…

C++初学者指南第一步---8.类型系统(基础)

C初学者指南第一步—8.类型系统&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---8.类型系统&#xff08;基础&#xff09;1.用const声明常量2.类型别名3.类型推导 auto4.常量表达式&#xff1a;constexpr (C11) 1.用const声明常量 语法&#xff1a; Type const v…

Python 设计模式(第2版) -- 第二部分(结构型模式)

Python 设计模式(第2版) 然后介绍下结构型设计模式。 下面是一些结构型设计模式的例子&#xff1a; 适配器模式&#xff1a;将一个接口转换成客户希望的另外一个接口。它试图根据客户端的需求来匹配不同类的接口。桥接模式&#xff1a;该模式将对象的接口与其实现进行解耦&a…

[手机Linux PostmarketOS]一,1加6T真正的手机Linux系统

前面用Linux deploy软件安装了Linux系统在手机&#xff0c;实则不是真正的手机刷成了linux系统&#xff0c;而是通过Linux deploy软件在容器里安装了Linux系统&#xff0c;在使用方面会有诸多限制&#xff0c;并不能发挥Linux的真实强大之处&#xff0c;于是我又百度又谷歌(真不…

Docker(四)-Docker镜像

1.概念 镜像是一种轻量级的、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖 打包好形成一个可交付的运行环境(包括代码&#xff0c;运行时需要的库&#xff0c;环境变量和配置文件等)&#xff0c;这个打包好的运行环境…

记录锁为什么都加在索引上?

记录锁&#xff08;Record Lock&#xff09;加在索引上的原因主要与数据库的性能优化和数据一致性有关。具体来说&#xff0c;锁加在索引上而不是直接加在数据行上&#xff0c;有以下几个关键原因&#xff1a; 1. 提高查询效率 当锁加在索引上时&#xff0c;数据库可以更高效…

wireshark常见使用表达式

目录 1. 捕获过滤器 (Capture Filters)基本捕获过滤器组合捕获过滤器 2. 显示过滤器 (Display Filters)基本显示过滤器复杂显示过滤器协议特定显示过滤器 3. 进阶显示过滤器技巧使用函数和操作符逻辑操作符 4. 常见网络协议过滤表达式示例HTTP 协议HTTPS 协议DNS 协议DHCP 协议…

Scala入门教程

Scala入门教程可以按照以下步骤进行&#xff0c;以下是详细的内容分点表示和归纳&#xff1a; 一、Scala简介 Scala是一门多范式编程语言&#xff0c;融合了面向对象编程和函数式编程的特性。它运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;因此可以直接使用Ja…

项目经理究竟一年能挣多少钱?一起来看看

作为现代企业中不可或缺的职业之一&#xff0c;“项目经理”对于企业经营具有非常重要的作用。但是关于项目经理的待遇问题&#xff0c;却一直饱受争议。那么&#xff0c;项目经理一般年薪到底有多少钱呢&#xff1f; 一、项目经理年薪概述 根据行业调查和统计数据&#xff0…

【Java】三种实现网络通讯的方式以及相关协议的使用示例

Java网络 - 应用篇 &#x1f47e;以下代码均经过本人实测&#xff0c;请放心食用。顺便求个关注&#xff0c;谢谢&#xff01;&#xff01; 文章目录 Java网络 - 应用篇Socket 篇简介代码实现SockerServerSocketClient RestTemplate 篇简介...ForEntity 与 ...ForObject 对比示…

IPFoxy代理IP:IPv4与IPv6性能与安全性对比

在使用IPFoxy静态代理IP的过程中&#xff0c;经常有小白朋友疑惑&#xff0c;IPv4与IPv6有何区别&#xff1f;他们在性能与安全上的差别如何&#xff0c;又该如何选择&#xff1f;在这篇博文中&#xff0c;我们将从各个方面为您科普这一区别&#xff0c;帮助您更好的选择。 一、…

Bootstrap 间距实用类

Bootstrap 间距实用类&#xff08;Spacing Utilities&#xff09; Bootstrap 提供了一套强大的实用类&#xff0c;用于快速设置元素的 margin 和 padding。这些类名遵循一致的命名规则&#xff0c;支持响应式设计&#xff0c;可以在不同的视口尺寸上进行调整。 1. 基本概念 …

柒拾肆- 如何通过数据影响决策(五)- 时序数据

什么是好&#xff1f; 对于 单一时序指标 来说&#xff08;如最简单的 销售、日活顾客数、订单数 等 &#xff09;&#xff0c;在决策时该怎样 看 呢&#xff1f; 或者换句话说&#xff0c;数据 应该怎样 表达 才能让决策者做出 更全面 的决策呢&#xff1f; 一、目前的方式 …

MPC与DDP结合案例

MPC与DDP结合概要 MPC与DDP的关系 1. 相似性: 优化过程: 都涉及到优化一个代价函数以求得最优控制输入。动态模型: 都依赖于系统的动力学模型来预测和更新系统状态。2. 差异性: 时间尺度: MPC 是在线控制,每次只优化有限预测区间的控制输入,然后在每个时间步长重新优化。D…

Mkdocs中文系列教程补充(1)

什么是requirements.txt 我的理解是mkdocs依赖的py库 第一次建立MKdocs文档使用 mkdocs new . 完后&#xff0c;比较建议执行一下&#xff1a; pip install -r requirements.txt 不然mkdocs serve后会出现什么 xxx not found &#xff0c;比如下面这位老哥 示例 mkdocs …

【C++】循环、控制流语句、

8、循环&#xff08;loops&#xff09;&#xff08;1&#xff09;for loops for循环非常灵活&#xff0c;可以做很多事情。上图红框框出来的代码块就是一个for循环。 for是关键字 for后面内容分为三部分&#xff0c;每部分用分号&#xff1b;隔开 第一部分A是变量的声明&…

Qt入门小项目 | 实现一个图片查看器

文章目录 一、实现一个图片查看软件 一、实现一个图片查看软件 需要实现的功能&#xff1a; 打开目录选择图片显示图片的名字显示图片 在以上功能的基础上进行优化&#xff0c;需要解决如下问题&#xff1a; 如何记住上次打开的路径&#xff1f; 将路径保存到配置文件中&#x…