• lambda


    P28  介绍了lambda表达式基本语法

    P475  介绍了STL函数对象及Lambda

    完整的lambda表达式结构

    这里假设我们定义了一个如上图的lambda表达式。现在来介绍途中标有编号的各个部分是什么意思。

    1. Lambda表达式的引入标志,在‘[]’里面可以填入‘=’或‘&’表示该lambda表达式“捕获”(lambda表达式在一定的scope可以访问的数据)的数据时以什么方式捕获的,‘&’表示一引用的方式;‘=’表明以值传递的方式捕获,除非专门指出。
    2. Lambda表达式的参数列表
    3. Mutable 标识
    4. 异常标识
    5. 返回值
    6. “函数”体,也就是lambda表达式需要进行的实际操作

    示例

    代码:

    #include <iostream> 
    using namespace std;
    
    int main()
    {
        int x = 3, y = 5;
        auto fun1 = []{ cout << "hello" << endl; };
        auto fun2 = [&]
        {
            cout << "x:" << x++ << endl;
            cout << "y:" << y++ << endl;
        };
        auto fun3 = [](int x, int y){return x + y; };
        fun1();
        fun2();
        fun2();
        cout<<fun3(6, 8);
        system("pause");
        return 0;
    }

     输出:

    解释:

    fun1以最简单的lambda表达式,也就是[]{}

    fun2指出使用引用的方式传值,x,y在函数使用中改变其值

    fun3标明lambda可以拥有参数,指明小括号内

    注意:

    1. lambda的类型,是个不具名的functiong object,每个lambda表达式的类型都是独一无二的,如果想根据该类型声明对象,可借助于template和auto

    2. 使用过程中容易出错的是 auto fun[]{};和fun();

    使用

    lambda表达式常和STL一起使用

    与generate和for_each

    #include <iostream>
    #include <algorithm>
    #include <ctime>
    using namespace std;
    
    int main()
    {
        int a[10] = { 0 };
        srand(time(NULL));
        generate(a, a + 10, [](){ return rand() % 100; });
        cout << "before sort: " << endl;
        for_each(a, a + 10, [&](int i){ cout << i << " "; });
        cout << endl;
        cout << "After sort" << endl;
        sort(a, a + 10);
        for_each(a, a + 10, [&](int i){ cout << i << " "; });
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    第三周psp
    作业2
    词频统计 SPEC 20170914 1 1 1 1 1
    psp1111
    第一周大作业1
    mongodb安装操作 (2018/11/12)
    中间件 express生成项目(2018/11/10)
    express环境搭建(2018/11/09)
    后端路由(2018/11/07)
    Node模块的基本使用(2018/11/06)
  • 原文地址:https://www.cnblogs.com/raichen/p/5619318.html
Copyright © 2020-2023  润新知