首页 > 编程语言 >C++初学者指南-6.函数对象--lambdas(基础)

C++初学者指南-6.函数对象--lambdas(基础)

时间:2024-07-26 22:00:36浏览次数:11  
标签:闭包 函数 -- 捕获 C++ 对象 lambdas Lambdas

C++初学者指南-6.函数对象–lambdas(基础)

文章目录


幻灯片

提醒:函数类和对象

  • 类至少提供一个operator () (…) {…} 函数
  • 能像一个函数一样被调用
  • 可以是有状态的(不像函数)
    在这里插入图片描述

Lambdas

  • 编译器生成的函数对象
  • 可以像匿名函数一样使用
    在这里插入图片描述
    用分组排序算法partition进行示例
    下图为partition算法使用区间的示例
    在这里插入图片描述
    下图为partition算法使用lambda的示例
    在这里插入图片描述

变量捕获

  • lambda类 = 编译器生成的类
  • 闭包(closure) = lambda类的实例(对象)
  • 我们可以“捕捉”周围范围的变量:
    [=] (…) {…} 按值捕获变量
    在这里插入图片描述
    变量捕获:
  • [=] (…) {…} 按值捕获
  • [&] (…) {…} 按引用捕获
  • [x, &y] (…) {…} x按值捕获,y按引用捕获
  • [=, &y] (…) {…} 所有都按值捕获,除了y
    在这里插入图片描述

保存闭包

闭包的类型名称只有编译器知道。
=> 如果你需要保存闭包,使用 auto。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通用Lambdas (C++14)

在这里插入图片描述
在这里插入图片描述

广义捕获 (C++14)

对如下有用:

  • 向闭包添加新的成员变量
  • 将对象移动到闭包中
    在这里插入图片描述

相关内容

函数对象
视频:Back to Basics: Lambdas  (Nicolai Josuttis, 2021)
视频:Lambdas in Action  (CopperSpice C++)
视频:Lambdas in C++  (CopperSpice C++)

附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^

标签:闭包,函数,--,捕获,C++,对象,lambdas,Lambdas
From: https://blog.csdn.net/silencestarsky/article/details/140724580

相关文章

  • Midjourney提示词-动物系列-23
    divinewhitefoxfairyisbytheriverinwonderland,distantview,,Goldenratio,full-bodypicture,Smallhead,fluffybig-tailednine-tailedfox+9,Chineseart,cleverlight,hazybeauty,Mohrbacher'sFoxofProtection,stream,enchanting,immortal,fluff......
  • JS基础与进阶讲解
    JS基础讲解9.1、JS基础语法JavaScript是一种用于在客户端(即用户的浏览器)上运行的编程语言。它是一种脚本语言,可以直接嵌入到HTML页面中,并由浏览器解释和执行。在客户端环境中,JavaScript可以与用户交互,操作和修改网页的内容、结构和样式。它可以用于处理用户输入、响......
  • C语言大师之路:从零到王者/新手入门(3)选择语句
    序(一些闲话)我希望我的语言不要像专业书那样让人眼花缭乱,所以当我解释语法时,我会尽量避免使用太多专业术语,让说明更容易理解。我会用通俗易懂的语言来解释,而不是像专业书籍那样让人感到困惑。本人计划通过文章分享C语言的核心知识点和学习心得。鉴于仍处于学习阶段,文章中可......
  • 大牛直播SDK跨平台RTMP直播推送模块技术设计和功能列表
    整体架构大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器、编码前、编码后数据对接,功能强大,性能优异,配合大牛直播SDK的SmartPlayer播放器,轻松实现毫秒级的延迟体验,满足大多数行......
  • 18 双周迭代模式(3)
            前面几篇了解了敏捷开发的实践以及敏捷迭代管理,Scrum敏捷中,建议是2~4周一个迭代周期,较为广泛应用的是双周迭代模式,即两周完成一个迭代周期,一个迭代周期是指,软件开发到上线的时间。        在研发人员还在开发当前迭代的功能时,产品经理就规划好下一个迭......
  • Python虚拟环境创建、激活、使用,项目依赖导出、安装requestments.txt
    Python虚拟环境通过命令行终端创建python虚拟环境:新建一个文件夹,可以专门用来存放虚拟环境,这里在D盘创建Python_Virtual_Environment_test文件夹然后在这里输入cmd按回车键进入命令行终端此时打开的位置就是当前的路径,当然也可以 cd一步步进入到目标路径创建环境......
  • 思维导图工具MindMap本地docker一键安装详细教程
    文章目录前言1.Docker一键部署思维导图2.本地访问测试3.Linux安装Cpolar4.配置公网地址5.远程访问思维导图6.固定Cpolar公网地址7.固定地址访问前言本文主要介绍在Linux系统以docker方式一键部署思维导图工具SimpleMindMap,并结合cpolar内网穿透工具实现远程......
  • 3.5-RNN文本生成
    1语言模型生成文本的顺序前面我们已经能够实现使用下图的LSTM网络进行语言建模;对于一个已经在语料库上学习好的LSTM模型;如果语料库就只是yousaygoobyeandisayhello;那么当把单词i输入到模型中,Timexxx层的第一个LSTM层将会输出一个概率分布,这个概率分布中概率最大......
  • 你觉得很好用的东西和道理,也许别人并不喜欢,所以还不如学会等价交换
    在日常生活中,我们常常怀着一颗助人的心,希望能够帮助他人改善生活或解决问题。然而,有时候过度的介入可能并不是最好的帮助方式。本文将探讨如何平衡助人的愿望与尊重他人命运的重要性。助人情节的反思助人情节可能源自于善良和同情,但有时也可能带来反效果:过度介入:过度的帮......
  • C语言大师之路:从零到王者/新手入门(4)循环语句
    序(一些闲话)我希望我的语言不要像专业书那样让人眼花缭乱,所以当我解释语法时,我会尽量避免使用太多专业术语,让说明更容易理解。我会用通俗易懂的语言来解释,而不是像专业书籍那样让人感到困惑。本人计划通过文章分享C语言的核心知识点和学习心得。鉴于仍处于学习阶段,文章中可......