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

C++之lambda匿名函数总结(二百四十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之lambda匿名函数用法总结。

2.C++11之lambda匿名函数实例总结

  • Lambda函数是C++11引入的一种匿名函数的方式,它可以在需要函数对象的地方快速定义一个临时的函数。Lambda函数的语法相对简洁,可以方便地捕获局部变量,并且可以作为参数传递给其他函数。

  • Lambda函数的基本语法如下:

[capture](parameters) -> return_type {// 函数体
}
  • 其中,capture是指捕获的变量列表,可以是空的、值传递方式或引用传递方式。parameters是形参列表,可以为空或包含一个或多个形参。return_type是返回类型,可以省略(根据函数体自动推断)或明确指定。函数体是具体的函数实现。

以下是Lambda函数的一些常见用法和特性:

  1. 捕获变量:Lambda函数可以通过捕获变量来访问其作用域外的变量。捕获方式包括值捕获(通过值传递方式访问变量)和引用捕获(通过引用传递方式访问变量)。

  2. 自动类型推断:Lambda函数可以根据函数体自动推断返回类型,也可以显式指定返回类型。

  3. 函数重载:Lambda函数可以像普通函数一样进行重载,可以有多个具有相同函数体的Lambda函数,只需在参数列表中有所区别即可。

  4. 内联调用:Lambda函数通常是在定义的地方即被调用,也可以将Lambda函数作为参数传递给其他函数进行调用。

  5. 使用标准算法库: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匿名函数总结(二百四十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

STM32F103单片机内部RTC实时时钟驱动程序

一、STM32f103系列RTC功能 RTC实时时钟功能是嵌入式软件开发中比较常用的功能&#xff0c;一般MCU的RTC功能都带有年月日时间寄存器&#xff0c;比如STM32F4xx系列&#xff0c;RTC描述如下&#xff1a; 可见F4系列的RTC功能比较强大&#xff0c;设置好初始时间后&#xff0c;读…...

ChinaSoft 论坛巡礼 | 开源软件生态健康度量论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…...

Leetcode.2698 求一个整数的惩罚数

题目链接 Leetcode.2698 求一个整数的惩罚数 rating : 1679 题目描述 给你一个正整数 n n n &#xff0c;请你返回 n n n 的 惩罚数 。 n n n 的 惩罚数 定义为所有满足以下条件 i i i 的数的平方和&#xff1a; 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 问题描述&#xff1a;日志定位&#xff1a; 问题描述&#xff1a; 例行Hive作业报错 日志定位&#xff1a; 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参考 出现错误&#xff1a;Looking in indexes:https://pypi.tuna.tsinghua.edu.cn/simple...

嵌入式中的MCU、ARM、DSP、FPGA

目录 “角色扮演” MCU ARM 特点 DSP 特点 FPGA 特点 应用 “角色扮演” MCU&#xff08;Microcontroller Unit&#xff09;、ARM&#xff08;Advanced RISC Machine&#xff09;、DSP&#xff08;Digital Signal Processor&#xff09;和FPGA&#xff08;Field-Progr…...

二、PHP基础学习[变量]

部分内容引用自&#xff1a;https://blog.csdn.net/lady_killer9/article/details/108978062 一、PHP基础学习 1.语法与注释 示例&#xff1a; <?php // PHP 代码/* 这是 PHP 多行 注释 */ ?>2.输出 示例&#xff1a;echo 123; 3.变量 规矩&#xff1a; 变量以 …...

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 年&#xff0c;由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 《Design Patterns - Elements of Reusable Object-Oriented Software》&#xff08;中文译名&#xff1a;《设计模式 - 可复用的面向对…...

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的三挥四握

上一篇我们说了网络其实是不稳定的&#xff0c;TCP和UDP其实是两个不同的对立者&#xff0c;所以TCP为了保证数据在网络中传输的可靠性&#xff0c;从丢包、乱序、重传、拥塞等场景有自己的一套打法。 TCP格式 源端口和目标端口是不可缺少的&#xff0c;用以区分到达发送给拿…...

Docker镜像仓库

Docker镜像仓库 一、Docker镜像的创建1.1、基于已有镜像创建1.2、基于本地模板创建1.3、基于Dockerfile创建&#xff08;使用最广泛&#xff09;1.3.1、联合文件系统&#xff08;UnionFS&#xff09;1.3.2、镜像加载原理1.3.3、Dockerfile1.3.4、Docker 镜像结构的分层 二、如何…...

跨界技术:SOCKS5代理在电商、爬虫与游戏领域的应用

随着技术的日益发展&#xff0c;各种工具和技术手段被广泛应用于不同的领域。其中&#xff0c;SOCKS5代理、跨界电商、爬虫技术、出海策略以及游戏产业都成为了当下最热门的话题。本文将探讨这些关键技术如何相互融合&#xff0c;为企业和个人带来更多的机会和挑战。 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风格编写接口&#xff0c;定义一个类包含了 get post delete put 四种请求方式&#xff0c;这四种请求方式是不能重复的 例如:获取单条记录和多条记录使用的方式都是get&#xff0c;如果两个都要实现的话那么得定义两个类&#xff0c;因为在同一个类中不能有…...

RCE 远程代码执行漏洞分析

RCE 漏洞 1.漏洞描述 Remote Command/Code Execute 远程命令执行/远程代码执行漏洞 这种漏洞通常出现在应用程序或操作系统中&#xff0c;攻击者可以通过利用漏洞注入恶意代码&#xff0c;并在受攻击的系统上执行任意命令。 2.漏洞场景 PHP 代码执行PHP 代码注入OS 命令执…...

对比直接使用厂商 API 体验 Taotoken 在路由容灾上的价值

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用厂商 API 体验 Taotoken 在路由容灾上的价值 在开发依赖大模型能力的应用时&#xff0c;服务的连续性与稳定性是保障用…...

3分钟完成30分钟任务:词达人自动化助手终极指南

3分钟完成30分钟任务&#xff1a;词达人自动化助手终极指南 【免费下载链接】cdr 微信词达人&#xff0c;高正确率&#xff0c;高效简洁。支持班级任务及自选任务 项目地址: https://gitcode.com/gh_mirrors/cd/cdr 你是否厌倦了每周在词达人平台上花费数小时完成枯燥的…...

Iris API错误处理机制与嵌入式系统优化实践

1. Iris API错误处理机制解析在嵌入式系统开发中&#xff0c;API的健壮性直接影响整个系统的稳定性。Iris框架作为ARM架构下的核心组件&#xff0c;其错误处理机制基于JSON-RPC 2.0规范进行了深度定制&#xff0c;特别适合资源受限的嵌入式环境。与通用Web API不同&#xff0c;…...

基于Claude API构建AI代码生成工具:从API封装到工程化实践

1. 项目概述与核心价值最近在开发者社区里&#xff0c;一个名为ashish200729/claude-code-source-code的项目标题引起了不小的讨论。乍一看&#xff0c;这个标题很容易让人产生误解&#xff0c;以为这是某个知名AI模型的源代码被公开了。但作为一名在软件开发和开源领域摸爬滚打…...

本地化AI代码助手LLMDog:模块化框架与开源模型集成实践

1. 项目概述&#xff1a;一个为开发者设计的本地化AI代码助手最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目叫“LLMDog”&#xff0c;作者是doganarif。乍一看这个名字&#xff0c;可能会联想到“AI狗”或者某种宠物&#xff0c;但它的全称其实是“Large Language M…...

别再手动调色了!用Matlab bar3函数一键生成论文级渐变三维柱状图(附完整代码)

别再手动调色了&#xff01;用Matlab bar3函数一键生成论文级渐变三维柱状图&#xff08;附完整代码&#xff09; 科研图表的美观程度直接影响论文的第一印象&#xff0c;而三维柱状图在展示多维度数据时尤为常见。传统手动调整每个柱体的颜色、透明度、光照效果不仅耗时&#…...

Git安全增强实战:使用Ante实现策略即代码的版本控制防护

1. 项目概述&#xff1a;一个为开发者打造的“代码保险箱”如果你和我一样&#xff0c;在职业生涯中经历过几次“代码灾难”——比如不小心git push -f覆盖了同事的提交&#xff0c;或者手滑rm -rf删除了一个正在开发中的功能分支——那你一定会对“代码安全”这四个字有切肤之…...

Excalidraw草图AI技能:从图形解析到自动化代码生成实战

1. 项目概述&#xff1a;一个能“读懂”你草图的AI技能如果你经常用Excalidraw画流程图、架构图或者UI草图&#xff0c;那你一定遇到过这样的场景&#xff1a;画完一张图&#xff0c;想把它整理成文档&#xff0c;或者想基于这张图生成一些代码&#xff0c;又或者想让它自己动起…...

CircuitPython REPL与库管理:嵌入式开发的效率利器

1. CircuitPython REPL&#xff1a;你的嵌入式开发“瑞士军刀” 如果你玩过Arduino&#xff0c;肯定对“上传-编译-看结果”这个循环不陌生。每次改一行代码&#xff0c;都得重新编译、上传&#xff0c;然后盯着串口看输出&#xff0c;效率低得让人抓狂。CircuitPython带来的R…...

基于MCP协议构建个人AI工作流:模块化套件配置与隐私优先实践

1. 项目概述&#xff1a;一个为个人工作流注入AI智能的MCP套件 最近在折腾AI Agent和自动化工作流的朋友&#xff0c;应该都绕不开一个词&#xff1a; MCP 。全称是Model Context Protocol&#xff0c;你可以把它理解成AI模型&#xff08;比如Claude、ChatGPT&#xff09;和外…...