• Lambda表达式(附有案例)


    Lambda表达式

    Lambda表达式是C++11引入的一种函数对象(函数式编程)的语法扩展。它可以用于创建匿名的、临时的函数对象,并可以在需要函数对象的地方直接使用,而无需单独定义一个函数或函数对象类。

    Lambda表达式的基本语法如下:

    [capture list](parameters) -> return_type {
        // 函数体
    }
    
    • 1
    • 2
    • 3

    其中,各部分的含义如下:

    • capture list:捕获列表,用于指定外部变量的访问方式。可以省略,表示不捕获任何外部变量;也可以采用值捕获、引用捕获或混合捕获的方式捕获外部变量。
    • parameters:参数列表,与普通函数的参数列表相似。可以省略,表示无参数。
    • -> return_type:返回类型,表示Lambda表达式的返回类型。可以省略,根据函数体中的返回语句自动推导返回类型。
    • {}:函数体,包含实际的执行逻辑。

    Lambda表达式还有两种特殊形式:

    1. 表达式形式:当Lambda表达式只包含单个表达式时,可以省略{}和返回类型声明,直接通过表达式的结果进行返回。例如:[capture list](parameters) { return expression; }
    2. 语句形式:当Lambda表达式包含多个语句时,需要使用{}包围,并通过显式的return语句指定返回值。例如:[capture list](parameters) { statements; return expression; }

    Lambda表达式主要用于以下几个方面:

    1. 作为函数对象(函数指针)的替代:可以将Lambda表达式作为参数传递给函数,用于回调或算法中。
    2. 简化代码:Lambda表达式可以直接在需要函数对象的地方定义和使用,避免了额外的函数定义和命名。
    3. 支持函数式编程:通过Lambda表达式,可以更方便地进行函数式编程的操作,如map、reduce、filter等。

    在给定的代码示例中,Lambda表达式用于连接每个QClickLabelclicked信号与槽函数。它捕获了rowcolumncolorList这些外部变量,并在点击时通过调用NotifyManager::getInstance()->notifyOtherWindowChangeSkin()函数通知其他窗口改变皮肤颜色。Lambda表达式省略了返回类型声明,通过表达式的结果自动推导返回类型。

    例子,演示了Lambda表达式的用法:

    以下是一个简单的例子,演示了Lambda表达式的用法:

    #include 
    #include 
    #include 
    
    int main() {
        std::vector<int> numbers = {5, 2, 8, 3, 1};
    
        // 使用Lambda表达式排序
        std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
            return a < b;
        });
    
        // 使用Lambda表达式打印每个元素
        std::for_each(numbers.begin(), numbers.end(), [](int num) {
            std::cout << num << " ";
        });
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在上述代码中,首先定义了一个整数向量numbers,其中包含一些整数。

    然后,使用std::sort()算法对numbers进行排序。这里使用了一个Lambda表达式作为第三个参数,指定了排序的规则:如果a小于b,则返回true,否则返回false。Lambda表达式的参数列表为两个整数类型的参数ab,省略了返回类型声明,通过表达式的结果自动推导返回类型。

    接下来,使用std::for_each()算法遍历numbers,并使用Lambda表达式打印每个元素。Lambda表达式的参数列表为一个整数类型的参数num,通过std::cout输出该参数的值。

    运行以上代码,会将排序后的数字依次输出到控制台,结果为:1 2 3 5 8。

    这个例子展示了Lambda表达式的两个常见应用场景:作为算法的参数传递,以及简化代码书写。通过Lambda表达式,可以在需要函数对象的地方直接定义和使用匿名的、临时的函数对象。

  • 相关阅读:
    激光雷达Velodyne16配置及录制rosbag
    Linux--文件、进程、fork、open、系统调用、库函数相关知识
    Netty简介及简单客户端/服务端示例代码
    汽车标定技术(八)--MPC57xx是如何支持标定的页切换
    【代码随想录】算法训练营 第二十天 第六章 二叉树 Part 6
    linux5-make、库文件(静态库和共享库)
    nbcio-boot移植到若依ruoyi-nbcio平台里一formdesigner部分(一)
    go 语言 mage 安装踩坑
    Elasticsearch使用聚合查询
    机器学习处理问题的基本路线
  • 原文地址:https://blog.csdn.net/m0_46376834/article/details/134489409