• C++11—lambda表达式


    在这里插入图片描述
    []{}是一个类型;[]{}()就可以调用,相当于临时对象;多数会写成最后一种形式,赋予一个名称auto I=[]{};I();

    lambda语法

    在这里插入图片描述

    []导入符号,mutuable是否可以被改写参数,throwSpec丢出异常,->retType表示返回类型;紫框可写可不写,但是如果写一个就必须要写();{}是函数本体;()里放函数参数;[]取用外部的变量;

    (2)左侧相当于右侧建立一个仿函数类,重载();
    在这里插入图片描述

    • 绿色框还没做事情,只是一个定义,真正调用执行是f();注意输出为012,因为在定义时,相当于右侧的仿函数类,有自己的一个数据id,创建的时候看到了上面的id=0;自己的id=0;++id变得是自己的id数据,不会影响外界的id;
    • Lambda的类型是一个不知名的仿函数;
    • 因为[id]而不是[&id],因此外界id不会变;
    • mutable表示id可以改变,没有Mutable的话,就不能改变id;与仿函数还是又一点点不完全等价;

    lambda用法比较

    在这里插入图片描述

    • 第一个如上,第二个[&id]传入引用,外界会影响,操作也会影响外界;第三个,没有mutable就不允许改变[]中参数id,编译器会报错;
    • Lambda是一个仿函数,也可以在函数主题中定义变量,返回数值

    lambda举例

    在这里插入图片描述

    Lambda与decltype

    在这里插入图片描述

    (1)decltype用作获取Lmabda的类型;
    (2)上面一段话的意思就是,lambda就一个无名的仿函数,但是每个都是独一无二的,因此,如果要声明这个类型就使用template或者auto,如果需要类型就使用decltype,例如当你需要使用lambda作为一个hash function或者排序准则传给不定序容器,具体例子代码如图所示;
    (3)左侧是set<>coll(cmp);构造函数如箭头所指,
    (4)下面一段话:在使用decltype获取lambda类型作为容器类型时,需要同时传入lambda作为构造函数参数,不然容器set会选择调用lambda的默认构造函数和默认赋值操作,但是lambda并没有默认构造,编译器就会报错;因此需要set<>coll(cmp);传入lambda的cmp;

    lambda与functor仿函数的对比

    在这里插入图片描述
    左侧lambda就相当于一个inline内联函数,效率会比右侧仿函数更高;但是这点效率略显微不足道;

    lambda在标准库中的应用

    在这里插入图片描述

  • 相关阅读:
    Python实现snap:对齐多张遥感影像的空间范围
    港联证券:从AI到华为产业链 主流基金为何屡屡错过新科技
    JTS: 17 DiscreteHausdorffDistance 豪斯多夫距离计算
    使用 Pygame 构建和可视化数独游戏
    【算法系列 | 7】深入解析查找算法之—布隆过滤器
    IMX6ULL学习笔记(3)——挂载NFS网络文件系统
    2023年中国汽车差速器需求量、竞争现状及行业市场规模分析[图]
    Linux——进程控制之替换
    Antd的table组件自定义筛选菜单的使用
    超算,先进计算未来的研究方向有哪些?
  • 原文地址:https://blog.csdn.net/weixin_44570263/article/details/126875096