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

匿名函数( lambda 表达式)

在 C++ 中,匿名函数也被称为 lambda 表达式。C++11 引入了 lambda 表达式,使得在需要函数对象(函数符)的地方可以使用匿名函数来代替。

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

[capture list] (parameter list) -> return type { // 函数体
}

其中,capture list 用于指定需要捕获的外部变量,可以是按值捕获或按引用捕获;parameter list 是可选的,用于指定函数的参数列表;return type 也是可选的,用于指定函数的返回类型;函数体即为 lambda 函数的具体实现。

#include <iostream>int main() {int x = 10;int y = 5;// 使用 lambda 表达式计算两个数的和auto sum = [](int a, int b) {  //此处的auto不能改成intreturn a + b;};int result = sum(x, y);std::cout << "Sum: " << result << std::endl;return 0;
}

我们定义了一个 lambda 表达式 sum,它接受两个参数并返回它们的和。然后我们调用该 lambda 表达式,传入变量 x 和 y 的值,并将结果打印出来。

除了上述示例中的基本用法,C++ lambda 表达式还支持更多功能,比如按值捕获、按引用捕获外部变量、指定返回类型、省略参数列表等。这些功能可以根据具体需求进行灵活使用。

在这里插入图片描述

auto sum = [](int a, int b) { 此处的auto为什么不能改成int 不写auto的话要写成什么?

在这里插入图片描述

#include <iostream>int main() {int x = 10;int y = 20;int sum = [](int a, int b) -> int {return a + b;}(x, y);std::cout << "Sum: " << sum << std::endl;return 0;
}

在这里插入图片描述

1、按值捕获局部变量

# include <iostream>
using namespace std;
int main() {int x = 10;int y = 5;auto sum = [x, y]() {return x + y;};cout << "Sum:" << sum()<<endl;cout << "x: "<< x <<", y: " <<y<<endl;return 0;
}

在这个示例中,我们使用按值捕获来捕获局部变量 x 和 y。lambda 函数 sum 返回它们的和。在主函数中,我们调用 lambda 函数并打印结果。可以看到,lambda 函数的执行不会改变原始的 x 和 y 变量。

2、按值捕获函数参数

#include <iostream>
using namespace std;void print(int x, int y) {auto product = [x, y]() {return x*y;};cout << "Product: " << product() <<endl;
}int main() {print(2,3);return 0;
}

我们定义了一个函数 print,它接受两个参数 x 和 y,然后定义了一个 lambda 表达式 product,用于计算这两个参数的乘积。可以看到,我们在 lambda 表达式中使用了按值捕获来捕获函数参数。

3、按引用捕获全局变量

#include <iostream>
using namespace std;
int x = 10;
int y =5;int main() {auto sum = [&]() {return x + y;};cout<<"Sum: "<< sum() <<endl;x = 1;y = 2;cout<<"sum:" <<sum()<<endl;return 0;
}

在这里插入图片描述

在这个示例中,我们使用按引用捕获来捕获全局变量 x 和 y。lambda 函数 sum 返回它们的和。我们在主函数中首先打印 x 和 y 的初始值的和,然后改变这些变量的值,并再次调用 lambda 函数。可以看到,lambda 函数访问的是原始变量的引用,所以改变这些变量的值会影响 lambda 函数的执行结果

4、按引用访问函数变量

#include <iostream>
using namespace std;void print(int& x, int& y) {auto product = [&]() {return x * y;};cout <<"Product: " << product()<<endl;}int main() {int x = 1;int y = 2;print(x, y);x = 2;y = 3;print(x, y);return 0;
}

在这个示例中,我们定义了一个函数 print,它接受两个参数 x 和 y 的引用,然后定义了一个 lambda 表达式 product,用于计算这两个参数的乘积。可以看到,我们在 lambda 表达式中使用了按引用捕获来捕获函数参数的引用。

在这里插入图片描述

相关文章:

匿名函数( lambda 表达式)

在 C 中&#xff0c;匿名函数也被称为 lambda 表达式。C11 引入了 lambda 表达式&#xff0c;使得在需要函数对象&#xff08;函数符&#xff09;的地方可以使用匿名函数来代替。 lambda 表达式的基本语法如下&#xff1a; [capture list] (parameter list) -> return typ…...

基于SSM的汽车维修管理系统——LW模板

摘要 随着人们生活水平的不断提高&#xff0c;私家车的数量正在逐年攀升。这带动了汽车维修行业的发展。越来越多的汽车维修厂如雨后春笋般涌现。同时&#xff0c;维修厂的业务操作产生了庞大的数据&#xff0c;这给汽车维修厂工作人员的数据管理提出了新的要求&#xff0c;他们…...

Ceph的纠删码特性 EC(Erasure Code)代码流程

从GitHub上Clone Ceph项目&#xff0c;我是基于(ceph version 12.2.11 luminous 版本)的代码来分析的 一、EC&#xff08;Erasure Code&#xff09;是什么&#xff1f; Ceph的纠删码特性EC&#xff1a;将写入的数据分成N份原始数据&#xff0c;通过这N份原始数据计算出M份效验…...

盘点那些国际知名黑客(上篇)

电影中的黑客仅靠一部电脑就可以窃取别人的信息&#xff0c;利用自己高超的技术让公司甚至国家都胆战心惊。“黑客”原指热心于计算机技术、水平高超的电脑高手&#xff0c;但逐渐区分为黑帽、白帽、灰帽。这些术语源自美国流行文化的老式西部电影&#xff0c;其中主角戴白色或…...

机器学习基础12-Pipeline实现自动化流程处理(基于印第安糖尿病Pima 数据集)

有一些标准的流程可以实现对机器学习问题的自动化处理&#xff0c;在 scikitlearn 中通过Pipeline来定义和自动化运行这些流程。本节就将介绍如何通过Pipeline实现自动化流程处理。 如何通过Pipeline来最小化数据缺失。如何构建数据准备和生成模型的Pipeline。如何构建特征选择…...

Ansible学习笔记15

1、roles&#xff1a;&#xff08;难点&#xff09; roles介绍&#xff1a; roles&#xff08;角色&#xff09;&#xff1a;就是通过分别将variables&#xff0c;tasks及handlers等放置于单独的目录中&#xff0c;并可以便捷地调用他们的一种机制。 假设我们要写一个playbo…...

圆圈加数字的css

方式一 .circle { width: 50px; height: 50px; border-radius: 50%; background-color: #f00; color: #fff; text-align: center; line-height: 50px; } .circle::before { content: attr(data-number); display: block; } <div class"circle" data-number"…...

YOLOV5/YOLOV7/YOLOV8改进:用于低分辨率图像和小物体的新 CNN 模块SPD-Conv

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 3.涨点效果:SPD-Conv提升小目标识别,实现有效…...

Docker数据管理(数据卷与数据卷容器)

目录 一、数据卷&#xff08;Data Volumes&#xff09; 1、概述 2、原理 3、作用 4、示例&#xff1a;宿主机目录 /var/test 挂载同步到容器中的 /data1 二、数据卷容器&#xff08;DataVolumes Containers&#xff09; 1、概述 2、作用 3、示例&#xff1a;创建并使用…...

大量TCP连接滞留TIME_WAIT、SYN_SENT、CLOSE_WAIT状态的分析

文章目录 一、统计各类状态的tcp连接数量二、TIME_WAIT应用服务器上&#xff0c;来自反向代理的连接反向代理上&#xff0c;访问应用服务的连接反向代理上&#xff0c;来自用户的连接 三、SYN_SENT反向代理上&#xff0c;访问位于防火墙另一侧的目标反向代理上&#xff0c;访问…...

kotlin怎么定义类

在Kotlin中&#xff0c;你可以使用class关键字来定义一个类。以下是一个简单的例子&#xff1a; class MyClass {// class body} 这个例子定义了一个名为MyClass的类。你可以在类体中定义属性和方法。 如果你想定义一个带有属性的类&#xff0c;你可以这样做&#xff1a; cla…...

如何查看数据集下载后保存的绝对路径?

1.问题 当我们下载torchvision.datasets里面的数据集时&#xff0c;有时候会遇到找不到数据集保存路径的问题。 2.解决 引入os库 import os调用如下方法 os.path.abspath(数据集对象.root)以下面代码为例 import os import torchvision.datasets as datasets# 指定数据集…...

使用php实现微信登录其实并不难,可以简单地分为三步进行

使用php实现微信登录其实并不难&#xff0c;可以简单地分为三步进行。 第一步&#xff1a;用户同意授权&#xff0c;获取code //微信登录public function wxlogin(){$appid "";$secret "";$str"http://***.***.com/getToken";$redirect_uriu…...

【LeetCode-中等题】24. 两两交换链表中的节点

文章目录 题目方法一&#xff1a;递归方法二&#xff1a;三指针迭代 题目 方法一&#xff1a;递归 图解&#xff1a; 详细版 public ListNode swapPairs(ListNode head) {/*递归法:宗旨就是紧紧抓住原来的函数究竟返回的是什么?作用是什么即可其余的细枝末节不要细究,编译器…...

5.10 汇编语言:汇编过程与结构

过程的实现离不开堆栈的应用&#xff0c;堆栈是一种后进先出(LIFO)的数据结构&#xff0c;最后压入栈的值总是最先被弹出&#xff0c;而新数值在执行压栈时总是被压入到栈的最顶端&#xff0c;栈主要功能是暂时存放数据和地址&#xff0c;通常用来保护断点和现场。 栈是由CPU管…...

【每日一题Day304】LC1267统计参与通信的服务器 | 哈希表

统计参与通信的服务器【LC1267】 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统…...

深度解读零信任身份安全—— 全面身份化:零信任安全的基石

事实上&#xff0c;无论是零信任安全在数据中心的实践&#xff0c;还是通用的零信任安全架构实践&#xff0c;全面身份化都是至关重要的&#xff0c;是“企业边界正在瓦解&#xff0c;基于边界的安全防护体系正在失效”这一大背景下&#xff0c;构筑全新的零信任身份安全架构的…...

音视频 ffmpeg命令提取音视频数据

保留封装格式 ffmpeg -i test.mp4 -acodec copy -vn audio.mp4 ffmpeg -i test.mp4 -vcodec copy -an video.mp4提取视频 保留编码格式&#xff1a;ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264 强制格式&#xff1a;ffmpeg -i test.mp4 -vcodec libx264 -an test.h2…...

vscode 配置

vscode 配置 安装插件 Better C SyntaxC/CCMake、CMake Tools 、CMake Language SupportDoxygen Documentation GeneratorGit Graphhighlight-wordsPythonvscode-iconsClang-Format和clangdtyporahex editor .vscode 中的文件 在 VS Code 中&#xff0c;.vscode​ 文件夹是用于…...

企业数字化管控平台及信息化治理体系建设方案(附300份方案)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除&#xff0c;更多浏览公众号&#xff1a;智慧方案文库 数字化校园整体解决方案.doc150页6万字数字化智能工厂信息化系统集成整合规划建设方案.docx2022年采购数字化市场研究报告…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”&#xff0c;于是尝试整合图像识别与网页自动化技术&#xff0c;完成了这套模拟登录流程。核心思路是&#xff1a;截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

前端调试HTTP状态码

1xx&#xff08;信息类状态码&#xff09; 这类状态码表示临时响应&#xff0c;需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分&#xff0c;客户端应继续发送剩余部分。 2xx&#xff08;成功类状态码&#xff09; 表示请求已成功被服务器接收、理解并处…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...