c++11 lambda 捕获,匿名,返回类型后置

lambda就是即写即用的匿名函数,可以用于解决匹配函数参数的问题

int main(int argc,char *argv[])
{vector<int> v{1,2,3,4,5,6,7,8};for_each(v.begin(),v.end(),[](int a){cout<<a;});return 0;
}

for_each是固定函数,我们需要他但是又没必要为打印单独写一个函数匹配他的第三个参数类型,就可以使用lambda去匹配这个函数,即写即用。

也可以使用标识符给匿名函数命名,在函数的生存域内都有效,如果一个匿名函数只在函数内使用,就可以使用这种方法(普通的函数是不允许在函数内定义的)

int main(int argc,char *argv[])
{vector<int> v{1,2,3,4,5,6,7,8};auto f([](int a){cout<<a;});f(10);//调用ffor_each(v.begin(),v.end(),f);//调用freturn 0;
}

既然lambda函数有生存周期,那么同样的可以通过捕获获取生存周期内的其他变量供其使用

int main(int argc,char *argv[])
{vector<int> v{1,2,3,4,5,6,7,8};int x=5;//增加一个系数打印auto f([](int a){cout<<a*x;});//报错,未捕获for_each(v.begin(),v.end(),f);return 0;
}

因为函数内部和外部是隔绝的,所以无法调用x,需要使用捕获获取。等同于输入变量

int main(int argc,char *argv[])
{vector<int> v{1,2,3,4,5,6,7,8};int x(5),y(10);//增加多个系数auto f([x,y](int a){cout<<a*x*y;});for_each(v.begin(),v.end(),f);return 0;
}

当然也可以通过捕获指针和引用去改变变量的值,但是注意,lambda只能捕获声明他的函数内的变量,全局/静态变量不需要捕获,只要可见直接在函数体里调用就行了

lambda还能解决bind匹配参数的问题

int main(int argc,char *argv[])
{vector<int> v{1,2,3,4,5,6,7,8};int x(5);//系数plus<int> add;//具体化int相加的算法函数auto f([x,add](int a){cout<<add(x,a);});//转为一元函数,相当于binder1st(add x)for_each(v.begin(),v.end(),f);//这样就可以直接带入函数了return 0;
}

 

是否需要有返回类型的描述是:如果 Lambda 体仅包含一个返回语句(return),则可以省略 Lambda 表达式的 return-type 部分。

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

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

相关文章

如何使用IdeaJ2023创建一个JavaWeb项目

开篇 简单整理一下创建JavaWeb项目的步骤&#xff0c;希望能对您有所帮助。 步骤图解 步骤一: 创建项目 此时得到的项目是如图所示的普通Java项目&#xff1a; 步骤二: 在项目中增加web文件夹 点击File -> Project Structure 点击Project Setting -> Modules -> …

Android 10.0 Launcher3定制folder文件夹2x2布局之一xml文件配置和解析相关属性

1.前言 在10.0的系统rom产品定制化开发中,在对Launcher3的folder文件夹功能定制中,要求folder文件夹跨行显示,就是 2x2布局显示,默认的都是占1格的,现在要求占4格显示,系统默认是不支持显示4格的,所以接下来需要分析相关的 功能,然后来实现这个功能 2.Launcher3定制fo…

PMP考试不用报班可以自学?

随着近年来PMP证书在国内越来越受欢迎&#xff0c;越来越多的人开始报考PMP考试&#xff0c;甚至不少企业还会通过各种奖励政策来鼓励内部项目骨干去考取PMP证书。许多第一次参加PMP考试的人会有这样的疑问&#xff0c;那就是考PMP证书是否必须参加培训班呢&#xff1f;还是说可…

C程序内存分布及static变量

C程序内存分布及static变量 C语言中程序的内存分布 [&#x1f517;1](https://www.cnblogs.com/miaoxiong/p/11021827.html)[&#x1f517;2](https://blog.csdn.net/chen1083376511/article/details/54930191)c/c编译连接后二进制文件的存储动静态存储方式和存储区动态存储方式…

proteus使用问题

1、无法和视频里面一样新建工程 2、实验效果和视频不也一样 自己的电路图(灯不亮)&#xff1a;

【Spring】GoF 之代理模式

一、代理模式 在 Java 程序中的代理模式的作用&#xff1a; 当一个对象需要受到保护的时候&#xff0c;可以考虑使用代理对象去完成某个行为 需要给某个对象的功能进行功能增强的时候&#xff0c;可以考虑找一个代理进行增强 A 对象无法和 B 对象直接交互时&#xff0c;也可以…

21_Scala集合_可变数组ArrayBuffer

文章目录 ArrayBuffer1.创建可变数组ArrayBuffer2.增加数据3.删除数据4.修改数据5.查询数据Appendix ArrayBuffer ArrayBuffer可变数组–感觉优点类似于Java的ArrayList 1.创建可变数组ArrayBuffer –请注意下面的mutable import scala.collection.mutable.ArrayBuffer //m…

Audition处理音频文件背景音(保留人声)

音频文件背景音可以使用Adobe Audition进行处理&#xff0c;Adobe Audition的下载与安装见之前博客&#xff1a; Adobe Audition 2024 下载与安装-CSDN博客https://blog.csdn.net/xiaoxian666/article/details/138612837?spm1001.2014.3001.5502 一、选中一段不含人声的背景…

ESD静电问题 | PCB布局布线对防护效果的影响

【转自微信公众号&#xff1a;韬略科技EMC】

C语言例题38、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,最后留下来的是原来第几号人员?

#include <stdio.h> #define MAX_CALLER 3void main() {int j 0;int p_total;//人数int p_caller 0;//每3人循环计数&#xff1a;1,2,3int p_exit 0; //退出游戏的人数int people[255] {0};//参与游戏人员名单printf("请输入参与游戏人数&#xff1a;");s…

通过编写dockerfile部署python项目

docker命令总览 docker通过dockerfile构建镜像常用命令 # 创建镜像&#xff08;进入dockerfile所在的路径&#xff09; docker build -t my_image:1.0 .# 查看镜像 docker images# 创建容器 docker run -dit --restartalways -p 9700:9700 --name my_container my_image:1.0 #…

一款开源的原神工具箱,专为现代化 Windows 平台设计,旨在改善桌面端玩家的游戏体验

Snap.Hutao 胡桃工具箱是一款以 MIT 协议开源的原神工具箱&#xff0c;专为现代化 Windows 平台设计&#xff0c;旨在改善桌面端玩家的游戏体验。通过将既有的官方资源与开发团队设计的全新功能相结合&#xff0c;提供了一套完整且实用的工具集&#xff0c;且无需依赖任何移动设…