lambda

2023-09-19 18:15:23

        一个lambda表达式表示一个可调用的代码单元。可以将其理解为一个未命名的内联函数。与普通函数类似,一个lambda具有一个返回类型、一个参数列表和一个函数体。与普通函数不同的是,lambda可以定义在其他函数内部。一个lambda表达式具有如下形式:

[capture list](parameter list)-> return type { function body }

        其中,capture list(捕获列表)是一个lamda所在函数中定义的局部变量的列表(通常为空);return type、parameter list和function body与任何普通函数一样,分别表示返回类型、参数列表和函数体。但与普通函数不同的是,lambda必须使用尾置返回来指定返回类型。

        注:如果lambda的函数体包含任何单一return语句之外的内容,且未指定返回类型,则返回void。

        以下是一个使用lambda函数的函数示例,该函数接受两个参数(一个vector<string>类型的容器和一个vector<string>类型的尺寸参数),函数计算输入容器内大于给定尺寸的数据的个数并打印这些数据:

viod biggies(vector<string> &words, vector<string>::size_type sz)
{
    elimDups(words);  //自定义函数,将words按字典顺序排序,删除重复单词
    //  按长度排序,长度相同的单词维持字典序
    stable_sort(words.begin(),words.end(),
        [](const string &a, const string &b){ return a.size()<b.size(); });
    //  获取一个迭代器,指向第一个满足size()>=sz的元素
    auto wc=find_if(words.begin(),words.end(),
        [sz](const string &a){ return a.size()>=sz; });
    //  计算满足size>=sz的元素的数目
    auto count=words.end()-wc;
    cout<<count<<" "<<make_plural(count,"word","s")
        <<" of length "<<sz<<" or longer "<<endl;
    //  打印长度大于等于给定值的单词,每个单词后面接一个空格
    for_each(wc,words.end(),[](const string &s){ cout<<s<<" ";});
    cout<<endl;
}

        注:一个lambda只有在其捕获列表中捕获一个它所在函数中的局部变量,才能在函数体中使用该变量。捕获列表只适用于局部非static变量,lambda可以直接使用局部stati变量和它所在函数之外声明的名字。

建议:尽量保持lambda的变量捕获简单化

lambda捕获列表

更多推荐

react-route的路由

React-Router是一个基于React的强大路由库,它可以帮助我们在React应用中实现页面之间的跳转和路由管理。本文将详细介绍React-Router的路由功能、常用功能模块、路由传参和路由嵌套,并提供相关代码和解释。路由功能React-Router通过管理URL和组件的映射关系,可以帮助我们实现以下路由功能:

算法 缺失的第一个正整数-(哈希)

牛客网:BM53题目:无重复元素数组中未出现的最小的正整数思路:(1)使用单独hash表记录每个元素出现的次数,从1开始递增查询出现次数直到次数为0停止返回(2)将原数组作为hash表使用,处理好负数与0,将绝对值在N范围内的每个元素的绝对值减1定位到数组相关的下标将值置反(因为每个元素可能已被其他元素置为负数,所以需

时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测

时序预测|MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测目录时序预测|MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测预测效果基本介绍程序设计参考资料预测效果基本介绍MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测(完整源码和数

可以查看输入字数的手机备忘录软件用哪个?

在当下这个科技迅速发展的时代,我们常常需要依赖备忘录来记录重要的信息、灵感和待办事项。手机备忘录成为了我们随身携带的工具,但是你有没有遇到这样的情况:你写了很多内容,但不知道写了多少字?这个问题或许曾经困扰着你,但如今,有了敬业签,一切都变得方便了。敬业签不仅仅是一个备忘录应用,它是一款可以分类记录工作计划、学习笔记、

Linux 线程同步、互斥锁、避免死锁、条件变量

1.线程同步概述线程同步定义线程同步,指的是控制多线程间的相对执行顺序,从而在线程间正确、有序地共享数据,以下为线程同步常见使用场合。多线程执行的任务在顺序上存在依赖关系线程间共享数据只能同时被一个线程使用线程同步方法在实际项目中,经常使用的线程同步方法主要分为三种:互斥锁条件变量Posix信号量(包括有名信号量和无名

Unity中关于多线程的一些事

一.线程中不允许调用unity组件api解决方法:可以使用bool值变化并且在update中监测bool值变化来调用关于unity组件的API.二.打印并且将信息输出到list列表中多线程可能同时输出多条信息。输出字符串可以放入Queue队列中。队列可以被多线程插入。三.启用socket连接server在主线程中直接连

Qt5开发及实例V2.0-第十一章-Qt事件处理及实例

Qt5开发及实例V2.0-第十一章-Qt事件处理及实例第11章Qt5事件处理及实例11.1鼠标事件及实例11.2键盘事件及实例11.3事件过滤及实例本章相关例程源码下载1.Qt5开发及实例_CH1101.rar下载2.Qt5开发及实例_CH1102.rar下载3.Qt5开发及实例_CH1103.rar下载第11章Qt5

buuctf-[网鼎杯 2020 朱雀组]phpweb

1.打开网站,吓我一跳2.查看源代码,主要看到timezone,然后这个页面是五秒就会刷新一次一开始去搜了这个,但是没什么用3.使用bp抓包会发现有两个参数,应该是用func来执行p4.修改func和pfile_get_contents:把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。

排序算法(未完)

诸神缄默不语-个人CSDN博文目录打算做每个算法介绍详细的思路、算法流程(PPT)、代码实现的视频。准备慢慢做。文章目录0.排序算法的稳定性分析1.插入排序/直接插入排序1.1希尔排序2.简单选择排序3.堆排序4.冒泡排序5.快速排序6.归并排序7.桶排序/箱排序8.基数排序/分配式排序/桶子法1.最低位优先(Leas

自动化测试工具slelnium的初体验

1.slelnium介绍1.1一个Web的自动化测试工具,最初是为网站自动化测试而开发的。1.2可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。1.3跨平台:linux、windows、mac;简单点说:是一款

华为数通方向HCIP-DataCom H12-831题库(单选题:121-140)

第121题在华为交换机上配置RADIUS服务器模板时,下列选项中哪些参数为可选的配置参数?A、认证服务器地址和端口B、RADIUS自动探测用户C、计费服务器地址和端口D、Shared-key答案:B解析:在华为交换机上配置radius服务器模板时,需要配置共享秘钥,认证服务器地址和端口,计费服务器地址和端口。可选配置r

热文推荐