C++之lambda匿名函数总结(二百四十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

1.前言
本篇目的:理解C++之lambda匿名函数用法总结。
2.C++11之lambda匿名函数实例总结
-
Lambda函数是C++11引入的一种匿名函数的方式,它可以在需要函数对象的地方快速定义一个临时的函数。Lambda函数的语法相对简洁,可以方便地捕获局部变量,并且可以作为参数传递给其他函数。
-
Lambda函数的基本语法如下:
[capture](parameters) -> return_type {// 函数体
}
- 其中,
capture是指捕获的变量列表,可以是空的、值传递方式或引用传递方式。parameters是形参列表,可以为空或包含一个或多个形参。return_type是返回类型,可以省略(根据函数体自动推断)或明确指定。函数体是具体的函数实现。
以下是Lambda函数的一些常见用法和特性:
-
捕获变量:Lambda函数可以通过捕获变量来访问其作用域外的变量。捕获方式包括值捕获(通过值传递方式访问变量)和引用捕获(通过引用传递方式访问变量)。
-
自动类型推断:Lambda函数可以根据函数体自动推断返回类型,也可以显式指定返回类型。
-
函数重载:Lambda函数可以像普通函数一样进行重载,可以有多个具有相同函数体的Lambda函数,只需在参数列表中有所区别即可。
-
内联调用:Lambda函数通常是在定义的地方即被调用,也可以将Lambda函数作为参数传递给其他函数进行调用。
-
使用标准算法库:Lambda函数经常与标准算法库中的函数(如sort、find_if、transform等)配合使用,提供灵活的函数对象。
3.C++11之lambda匿名函数实例
1. 捕获变量、按照特定规则排序
#include <iostream>
#include <vector>
#include <algorithm>int main() {int a = 5;int b = 3;std::vector<int> nums = {2, 5, 1, 7, 3};// 捕获变量 a 和引用捕获变量 b,并按照特定规则排序std::sort(nums.begin(), nums.end(), [a, &b](int x, int y) {return a * x < b * y;});// 输出排序后的结果for (int num : nums) {std::cout << num << " ";}return 0;
}
2.自动类型推断并显式指定返回类型
#include <iostream>int main() {// 自动类型推断的 Lambda 函数auto lambda1 = [](auto x, auto y) {return x + y;};// 显式指定返回类型的 Lambda 函数auto lambda2 = [](int x) -> int {return x * x;};// 使用 Lambda 函数进行计算并输出结果std::cout << "自动类型推断的结果:" << lambda1(3, 4) << std::endl;std::cout << "显式指定返回类型的结果:" << lambda2(5) << std::endl;return 0;
}
3. 函数重载并内联调用
#include <iostream>// Lambda 函数重载
auto lambda1 = [](int x) -> int {return x * x;
};auto lambda2 = [](double x) -> double {return x * x;
};// 具体函数内联调用 Lambda 函数
inline void printSquare(int x, auto squareFunc) {std::cout << "调用的结果为:" << squareFunc(x) << std::endl;
}int main() {int num1 = 5;double num2 = 2.5;printSquare(num1, lambda1); // 调用 lambda1 计算 num1 的平方printSquare(num2, lambda2); // 调用 lambda2 计算 num2 的平方return 0;
}
4.匿名函数内联调用
#include <iostream>int main() {int num1 = 5;int num2 = 2;// 使用Lambda函数计算平方并输出结果auto printSquare = [&]() {int square1 = num1 * num1; // 计算num1的平方int square2 = num2 * num2; // 计算num2的平方std::cout << "num1的平方:" << square1 << std::endl;std::cout << "num2的平方:" << square2 << std::endl;};// 调用Lambda函数printSquare();return 0;
}
5.lambda 函数作为参数调用schedule 函数
#include <iostream>
#include <functional>
//schedule的参数没有返回值和参数
void schedule(const std::function<void()>& func) {func();int main() {int x = 10;Scheduler scheduler;// 使用 lambda 函数作为参数调用 schedule 函数schedule([=] {std::cout << "The value of x is: " << x << std::endl;});return 0;
}
6.类中的lambda函数作为参数调用schedule 函数
#include <iostream>
#include <functional>class Scheduler {public://schedule的参数没有返回值和参数void schedule(const std::function<void()>& func) {func();}};int main() {int x = 10;Scheduler scheduler;// 使用lambda成员函数作为参数调用schedule函数scheduler.schedule([=] {schedule([=] {std::cout << "The value of x is: " << x << std::endl;});return 0;
}
7.lambda函数作为参数调用schedule函数,并将返回值放在匿名回调函数中返回。
void schedule(const std::function<void(int x)>& func) {int ret = 100;func(100);}int main() {int x = 10;//schedule([&](int y) {std::cout << "The value of x is: " << x << std::endl;std::cout << "The value of y is: " << y << std::endl;});return 0;
}
相关文章:
C++之lambda匿名函数总结(二百四十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
STM32F103单片机内部RTC实时时钟驱动程序
一、STM32f103系列RTC功能 RTC实时时钟功能是嵌入式软件开发中比较常用的功能,一般MCU的RTC功能都带有年月日时间寄存器,比如STM32F4xx系列,RTC描述如下: 可见F4系列的RTC功能比较强大,设置好初始时间后,读…...
ChinaSoft 论坛巡礼 | 开源软件生态健康度量论坛
2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…...
Leetcode.2698 求一个整数的惩罚数
题目链接 Leetcode.2698 求一个整数的惩罚数 rating : 1679 题目描述 给你一个正整数 n n n ,请你返回 n n n 的 惩罚数 。 n n n 的 惩罚数 定义为所有满足以下条件 i i i 的数的平方和: 1 ≤ i ≤ n 1 \leq i \leq n 1≤i≤n i ∗ i i * i i∗i 的…...
大数据Flink(一百零二):SQL 聚合函数(Aggregate Function)
文章目录 SQL 聚合函数(Aggregate Function) SQL 聚合函数(Aggregate Function) Python UDAF,即 Python AggregateFunction。Python UDAF 用来针对一组数据进行聚合运算,比如同一个 window 下的多条数据、或者同一个 key 下的多条数据等。针对同一组输入数据,Python A…...
因mapjoin加载内存溢出而导致return code 3
因mapjoin加载内存溢出而导致return code 3 问题描述:日志定位: 问题描述: 例行Hive作业报错 日志定位: Starting to launch local task to process map join; maximum memory 5172101120 [2023-10-16 07:56:51,530] - INFO:…...
pip 指定源
pip定源 # 指定豆瓣 python -m pip install transformers -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com参考 出现错误:Looking in indexes:https://pypi.tuna.tsinghua.edu.cn/simple...
嵌入式中的MCU、ARM、DSP、FPGA
目录 “角色扮演” MCU ARM 特点 DSP 特点 FPGA 特点 应用 “角色扮演” MCU(Microcontroller Unit)、ARM(Advanced RISC Machine)、DSP(Digital Signal Processor)和FPGA(Field-Progr…...
二、PHP基础学习[变量]
部分内容引用自:https://blog.csdn.net/lady_killer9/article/details/108978062 一、PHP基础学习 1.语法与注释 示例: <?php // PHP 代码/* 这是 PHP 多行 注释 */ ?>2.输出 示例:echo 123; 3.变量 规矩: 变量以 …...
k8s kubeadm配置
master 192.168.41.30 docker、kubeadm、kubelet、kubectl、flannel node01 192.168.41.31 docker、kubeadm、kubelet、kubectl、flannel node02 192.168.41.32 do…...
B-3:Web安全之综合渗透测试
B-3:Web安全之综合渗透测试 任务环境说明: 服务器场景:Server2104(关闭链接) 服务器场景用户名、密码:未知 1.通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为FLAG值提交; 通过访问IP/1,查看源代码发现flagishere,访问后发现什么也没…...
设计模式—设计模式总览
设计模式—设计模式总览 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 《Design Patterns - Elements of Reusable Object-Oriented Software》(中文译名:《设计模式 - 可复用的面向对…...
C++ 流程控制(分支、循环、跳转)
#include<iostream>using namespace std;int main() {// 单分支和双分支cout << "please enter your age:" << endl;int age;cin >> age;if(age > 18){cout << "welcome! adult." << endl;}else{cout << &qu…...
【网络协议】聊聊TCP的三挥四握
上一篇我们说了网络其实是不稳定的,TCP和UDP其实是两个不同的对立者,所以TCP为了保证数据在网络中传输的可靠性,从丢包、乱序、重传、拥塞等场景有自己的一套打法。 TCP格式 源端口和目标端口是不可缺少的,用以区分到达发送给拿…...
Docker镜像仓库
Docker镜像仓库 一、Docker镜像的创建1.1、基于已有镜像创建1.2、基于本地模板创建1.3、基于Dockerfile创建(使用最广泛)1.3.1、联合文件系统(UnionFS)1.3.2、镜像加载原理1.3.3、Dockerfile1.3.4、Docker 镜像结构的分层 二、如何…...
跨界技术:SOCKS5代理在电商、爬虫与游戏领域的应用
随着技术的日益发展,各种工具和技术手段被广泛应用于不同的领域。其中,SOCKS5代理、跨界电商、爬虫技术、出海策略以及游戏产业都成为了当下最热门的话题。本文将探讨这些关键技术如何相互融合,为企业和个人带来更多的机会和挑战。 1. SOCKS…...
LeetCode--快速排序
文章目录 1 排序原理2 代码实现 1 排序原理 quickSort(int[] arr, int left, int right) 参数描述 arr: 待排序的数组left: 排序的左边位置right: 排序的右边位置 排序步骤: 先选取左边节点的数据作为 pivot从右边开始, 向左遍历节点数据, 在满足right > left 条件前提下…...
2023年CSP-S赛后总结(2023CSP-S题解)
目录 T1 题目描述 输入格式 输出格式 代码 T2 题目描述 输入格式 输出格式 题目描述 输入格式 输出格式 题意翻译 代码 T3 题目背景 题目描述 输入格式 输出格式 代码 T4 题目描述 输入格式 输出格式 总结 T1 题目描述 小 Y 有一把五个拨圈的密码锁。…...
Django viewsets 视图集与 router 路由实现评论接口开发
正常来说遵循restful风格编写接口,定义一个类包含了 get post delete put 四种请求方式,这四种请求方式是不能重复的 例如:获取单条记录和多条记录使用的方式都是get,如果两个都要实现的话那么得定义两个类,因为在同一个类中不能有…...
RCE 远程代码执行漏洞分析
RCE 漏洞 1.漏洞描述 Remote Command/Code Execute 远程命令执行/远程代码执行漏洞 这种漏洞通常出现在应用程序或操作系统中,攻击者可以通过利用漏洞注入恶意代码,并在受攻击的系统上执行任意命令。 2.漏洞场景 PHP 代码执行PHP 代码注入OS 命令执…...
comsol matlab联合仿真 也可加入solidworks三软件联合 参数化建模 全自动...
comsol matlab联合仿真 也可加入solidworks三软件联合 参数化建模 全自动建模迭代分析 实现多目标优化 帕累托前沿 代码模型与仿真参数化建模这事儿,玩过CAD和仿真的都懂——改个螺丝孔直径就得重新画图导出,累死个人。不过要是把SolidWorks、COMSOL和M…...
MCP 会不会成为 AI 系统的“新中间件”?
一、为什么人们开始把 MCP 和“中间件”类比?(Why Do People Start Comparing MCP to “Middleware”?)1、MCP 出现的位置非常“熟悉”(MCP Appears in a Very Familiar Position)当人们第一次在企业架构中引入 MCP 时…...
MD500E无感观测器模型:顺逆风检测与启动功能,低速性能优越的浮点模型
MD500E无感观测器模型顺逆风检测和启动。 逆风可刹停,也可直接切入闭环运行。 低速性能良好,可零速启动,堵转不发散,可正反转切换。 提供原版论文。 电阻、电感、磁链偏差20%情况下,对观测器性能无影响。 注 本模型是M…...
技术赋能B端拓客:号码核验行业的迭代升级与价值深耕,
在数字经济持续深耕的当下,B端市场的竞争逻辑已发生根本性转变,“粗放拓客”逐渐被“精准高效”取代,企业对拓客全流程的效率与成本管控提出了更高要求。号码核验作为B端拓客的前置核心环节,其作用远不止于简单的空号筛查…...
JSON处理效率倍增:探索JSON Viewer的3个鲜为人知实用功能
JSON处理效率倍增:探索JSON Viewer的3个鲜为人知实用功能 【免费下载链接】json-viewer It is a Chrome extension for printing JSON and JSONP. 项目地址: https://gitcode.com/gh_mirrors/js/json-viewer 在数据驱动开发的时代,高效处理JSON数…...
Git Diff View:三分钟学会实用的代码差异对比组件
Git Diff View:三分钟学会实用的代码差异对比组件 【免费下载链接】git-diff-view A Diff View component for React / Vue, just like Github 项目地址: https://gitcode.com/gh_mirrors/gi/git-diff-view 你是否曾经在代码审查中为理解复杂的Git差异而头疼…...
告别繁琐输入:基于SmartConfig与微信的ESP8266/ESP32一键配网实战
1. 为什么我们需要一键配网技术? 每次拿到新的智能设备,最头疼的就是怎么把它连上家里的Wi-Fi。传统的配网方式通常需要你在手机App里手动输入Wi-Fi名称和密码,这个过程不仅繁琐,还容易出错。想象一下,你要给10个智能灯…...
PCL (Matlab)拟合椭球
一、椭球点云数学模型二、PCL生成点云int main() {// 生成椭球点云 噪声pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);// 椭球参数float a 2.0f; // x轴float b 1.5f; // y轴float c 1.0f; // z轴int N 20000;// 随机数…...
Qwen-Image镜像实战:基于RTX4090D,轻松实现图片问答与内容分析
Qwen-Image镜像实战:基于RTX4090D,轻松实现图片问答与内容分析 1. 引言:Qwen-Image镜像的核心价值 在当今多模态AI技术快速发展的背景下,能够同时理解图像和文本的视觉语言模型正变得越来越重要。Qwen-Image作为通义千问系列中的…...
5分钟掌握Vue工作流设计器:workflow-bpmn-modeler终极指南
5分钟掌握Vue工作流设计器:workflow-bpmn-modeler终极指南 【免费下载链接】workflow-bpmn-modeler 🔥 flowable workflow designer based on vue and bpmn.io7.0 项目地址: https://gitcode.com/gh_mirrors/wo/workflow-bpmn-modeler 还在为复杂…...
