c++ lambda学习

一. 书写形式

[ capture clause ] (parameters) -> return-type { definition of method }

[ 捕获 ] ( 参数列表 ) -> 返回类型 { 函数定义 }
return-type返回值一般可以推导出来, 可以不用写, 所以可以简化为
[ capture clause ] (parameters) { definition of method }
但是在一些复杂的情况下, 比如条件语句这种, return-type是不能省略的

几个用例

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;void print_vector(vector<int> v)
{for_each(v.begin(), v.end(), [](int i) {cout << i << " ";});cout << endl;
}int main() {vector<int> v{ 4, 1, 3, 5, 2, 3, 1, 7 };print_vector(v);// 首个比4大的数字vector<int>::iterator p = find_if(v.begin(), v.end(), [](int i) {return i > 4;});cout << "first number greater than 4 is " << *p << endl;// 排序sort(v.begin(), v.end(), [](const int& a, const int& b) {return a > b;});print_vector(v);// 大于等于5的数字的个数int bigger_than_5_number = count_if(v.begin(), v.end(), [](int a) {return a >= 5;});cout << "the number of elements greater than or equal 5 is: " << bigger_than_5_number << endl;// 去重vector<int>::iterator p2 = unique(v.begin(), v.end(), [](int a, int b) {return a == b;});v.resize(distance(v.begin(), p2));print_vector(v);int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// 阶乘int res = accumulate(arr, arr + 10, 1, [](int a, int b) {return a * b;});// 平方auto square = [](int i) {return i * i;};cout << "square of 5 is : " << square(5) << endl;
}

执行结果
在这里插入图片描述

二. 详解捕获

lambda表达式还能够从闭包中获取数据, 就是[]中声明的
[a]: 不写&=的话, 默认值捕获
有三种方式:
[&] : 通过引用捕获所有外部变量
[=] : 通过值捕获所有外部变量
[a, &b] : a通过值捕获, b通过引用捕获

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;int main() {vector<int> v1 = { 3, 1, 7, 9 };vector<int> v2 = { 10, 2, 7, 16, 9 };auto push_number = [&](int a) {v1.push_back(a);v2.push_back(a);};push_number(20);auto print_v1 = [v1]() {for (auto p = v1.begin(); p != v1.end(); p++)cout << *p << " ";cout << endl;};print_v1();int N = 5;// 首个比N大的数vector<int>::iterator p = find_if(v1.begin(), v1.end(), [N](int i) {return i > N;});cout << "first number greater than 5 is " << *p << endl;// 大于等于5的数int count_n = count_if(v1.begin(), v1.end(), [=](int i) {return i >= N;});cout << "the number of elements greater than or equal 5 is " << count_n << endl;
}

执行结果
在这里插入图片描述

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

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

相关文章

循环购模式!增加用户复购的不二之选!

大家好&#xff0c;我是吴军&#xff0c;来自一家专注于软件开发与商业模式设计的公司。我们主要业务是构建商城系统&#xff0c;并为各类企业提供全面的商业模式解决方案。目前&#xff0c;我们已经成功开发了超过200种独特的商业模式&#xff0c;帮助许多企业实现了他们的商业…

TCP协议的核心机制

TCP协议的核心机制 一:确认应答机制1.2:超时重传接收缓冲区 超时重传时间重置连接 一:确认应答机制 对于TCP协议来说,要解决的一个很重要的问题,就是可靠传输 可靠传输,不是指发送方能够100%的把数据发送给接收方,而是尽可能. 尤其是让发送方知道,接收方是否收到. 举个例子: …

详解:重庆耶非凡的选品师项目有哪些优势?

在竞争激烈的电商市场中&#xff0c;重庆耶非凡科技有限公司凭借其独特的选品师项目&#xff0c;成功地在众多企业中脱颖而出。这一项目不仅体现了公司对市场趋势的敏锐洞察力&#xff0c;更彰显了其专业的选品能力和对消费者需求的深刻理解。 首先&#xff0c;耶非凡的选品师项…

大模型时代的具身智能系列专题(七)

北大王鹤团队 王鹤&#xff0c;北京大学前沿计算研究中心助理教授&#xff0c;本科毕业于清华大学&#xff0c;博士毕业于斯坦福大学&#xff0c;师从美国三院院士Leonidas. J Guibas教授。他创立并领导了具身感知与交互实验室(EPIC Lab)&#xff0c;实验室立足三维视觉感知与…

MyBatis的各种查询功能

1、查询&#xff1a; 查询的标签select必须设置属性resultType或resultMap&#xff0c;用于设置实体类和数据库表的映射关系 resultType&#xff1a;自动映射&#xff0c;用于属性名和表中字段名一致的情况 resultMap&#xff1a;自定义映射&#xff0c;用于一对多或多对一或…

Github生成SSH密钥,使用SSH进行连接

目录 一、生成新的SSH密钥 二、添加新的SSH密钥 三、测试SSH连接 四、SSH密钥密码 五、创建新仓库并推送到github 说明 使用 SSH URL 将 git clone、git fetch、git pull 或 git push 执行到远程存储库时&#xff0c; 须在计算机上生成 SSH 密钥对&#xff0c;并将公钥添加到…

(CVPRW,2024)可学习的提示:遥感领域小样本语义分割

文章目录 相关资料摘要引言方法训练基础类别新类别推理 相关资料 论文&#xff1a;Learnable Prompt for Few-Shot Semantic Segmentation in Remote Sensing Domain 代码&#xff1a;https://github.com/SteveImmanuel/OEM-Few-Shot-Learnable-Prompt 摘要 小样本分割是一项…

STP----生成树协议

目的&#xff1a;解决二层环路问题 跨层封装 广播风暴---广播帧在二层环路中形成逆时针和顺时针转动环路&#xff0c;并且无限循环&#xff0c;最终造成设备宕机&#xff0c;网络瘫痪。 MAC地址表的翻摆&#xff08;漂移&#xff09;---同一个数据帧&#xff0c;顺时针接收后记…

GUN compiler collection源代码编译过程

第一部分&#xff1a; 学习kernel需要了解编译的一些过程&#xff0c;为了详细理解GCC编译过程的原理&#xff0c;动手做了个sy&#xff0c;记录如下&#xff0c;有需要的童鞋可以参考。 1.环境&#xff1a;&#xff08;均可&#xff0c;二次环境并非是WSL版本&#xff09; r…

大模型应用框架-LangChain

LangChain的介绍和入门 &#x1f4a5; 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月&#xff0c;它是围绕LLMs&#xff08;大语言模型&#xff09;建立的一个框架&#xff0c;LLMs使用机器学习算法和海量数据来分析和理解自然语言&#xff0c;GPT3.5、GPT4是…

一维时间序列信号的奇异小波时频分析方法(Python)

最初的时频分析技术就是短时窗傅里叶变换STFT&#xff0c;由于时窗变短&#xff0c;可供分析的信号量减少&#xff0c;采用经典的谱估算方法引起的误差所占比重会增加。且该短时窗一旦选定&#xff0e;则在整个变换过程中其时窗长度是固定的。变换后的时频分辨率也即固定&#…

第十五届蓝桥杯物联网试题(省赛)

这个省赛题不算难&#xff0c;中规中矩&#xff0c;记得看清A板B板&#xff0c;还有ADC的获取要配合定时器

视频修复工具助你完成高质量的视频作品!

在短视频发展兴起的时代&#xff0c;各种视频层出不穷的出现在了视野中&#xff0c;人们已经从追求数量转向追求质量。内容相同的视频&#xff0c;你视频画质好、质量高的更受大家欢迎&#xff0c;那么如何制作高质量、高清晰度的视频呢&#xff1f;与您分享三个视频修复工具。…

Nios II 实现流水灯实验

Nios II 实现流水灯实验 一.硬件设计1.新建Quartus项目2. 设计Nios ii 二.软件设计 前言 实验目标&#xff1a; 学习 Quartus 、Platform Designer、Nios-II SBT 的基本操作&#xff1b;初步了解 SOPC 的开发流程&#xff0c;基本掌握 Nios-II 软核的定制方法&#xff1b;掌握 …

【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、深入理解并利用零值提升代码质量1.1 深入Go类型零值原理1.2 零值可用性的实践与优势1.2.1 切片(Slice)的零值与动态扩展1.2.2 Map的零值与安全访问1.2.3 函数参数与零值 二、使用复合字面值作为初值构造器2.1 结构体…

LINUX系统编程:信号(1)

目录 什么是信号&#xff1f; 为什要有信号呢&#xff1f; 进程接受信号的过程 1.信号的产生 1.1kill命令产生信号 1.2键盘产生信号 1.3系统调用接口 1.3.1killl() 1.3.2raise() 1.3.3abort() 1.4软件条件 1.5异常 1.6对各种情况产生信号的理解 1.6.1kill命令 1…

突破 LST/LRT 赛道中心化困境,Puffer Finance 何以重塑以太坊再质押未来

纵观过去的 2023 年&#xff0c;LST 赛道竞争进入“白热化”状态。去中心化、DeFi 增强、全链化成为市场争夺关键词&#xff0c;诸多 LST 赛道老牌项目纷纷陷入“中心化矛盾”&#xff0c;指责对方在以太坊去中心化进程中的不利作为。 在这样的竞争情形下&#xff0c;以太坊联…

SpringBoot登录认证--衔接SpringBoot案例通关版

文章目录 登录认证登录校验-概述登录校验 会话技术什么是会话呢?cookie Session令牌技术登录认证-登录校验-JWT令牌-介绍JWT SpringBoot案例通关版,上接这篇 登录认证 先讲解基本的登录功能 登录功能本质就是查询操作 那么查询完毕后返回一个Emp对象 如果Emp对象不为空,那…

【数据结构】详解堆的基本结构及其实现

文章目录 前言1.堆的相关概念1.1堆的概念1.2堆的分类1.2.1小根堆1.2.2大根堆 1.3堆的特点堆的实用场景 2.堆的实现2.1初始化2.2插入2.3堆的向上调整2.4删除2.5堆的向下调整2.6判空2.7获取堆顶元素2.8销毁 3.堆排序3.1实现3.2堆排序的时间复杂度问题 前言 在上一篇文章中&#…

TMS320F280049 ECAP模块--总览(0)

ECAP 特性&#xff1a; 4个32bit的事件时间戳寄存器&#xff1b; 4个连续时间戳捕获事件的边沿极性可选上升沿、下降沿 4个事件中每个都能触发中断 4个事件都能做单词触发 可以连续捕获4个事件 绝对的捕获时间戳 差异模式捕获 不使用捕获模式时&#xff0c;可以配置输出…