zoukankan      html  css  js  c++  java
  • 关于Lambda表达式的研究

    关于Lamabda表达式的研究

    一、Lamabda的表达式的起源

    二、Lamabda表达式的基本原理

    三、Lamabda表达式的结构

    四、Lamabda表达式的参数说明

    五、Lamabda表达式的用法

    六、Lamabda表达式的优越性

     

    一、Lamabda表达式的起源

    Lamabda表达式的起源来自于仿函数,什么是仿函数呢?简单来说就是一个类长得像函数,比如

    Class A;

    A();

    这就是一个仿函数。

    那么仿函数究竟是怎样实现的呢?其实他所使用的就是运算符重载,即为:

    Class A

    {

    Void operator() (int a) {}

    Int a;

    };

     

    这就是仿函数的用法。

    正如前面所述,Lamabda表达式可以看作一个没有类名的表达式,它就是在编译的时候自己启用了一个类名(至于为什么这么做,这个后面谈到优越性的时候会说)。那么当我们明白了这个知识点之后,我们就可以推导出两个结论:1、那就是仿函数可以在一定程度上替代Lamabda表达式。2、其次,Lamaba表达式的很多性质我们可以从仿函数当中是一样的。

    二、Lambda表达式的原理

    Lambda表达式,它的核心可以理解成一个临时函数,我们可以在其中实现一些内容,里面有返回值等等,也可以保存下来。

    三、Lambda表达式的结构

    Lambda表达式的结构如下图所示:

    []() mutable exception ->bool {}

    其中,红色部分不能省略,而黑色部分是可以省略的。简单解释一下参数。

    四、Lambda表达式的参数说明

    []:该参数表达的是传入的内容,即其他的参数可以通过它传入进Lamada函数中。

    ()Lamada表达式中我们自己设定的参数

    Mutable:表示可以修改[]传入的内容

    Exception: 我们可以指定是否传送出异常

    Bool: 返回值,我们可以传出任何返回值,int都可以。

    {}:函数体要实现的内容

    五、Lamada表达式的用法

    这里要重点说的是这两个[]mutable,我们在传入参数的时候有两种传法,第一种就是传送value,比如a,第二种传入reference,&a,那么针对这两种情况和mutable的配合就有四种用法:

    Value配合无mutable:那么这种情况是不能修改Value的。这可能也是和仿函数的区别吧。

    Value配合mutable:这种情况可以修改Value,但是仅仅限于函数内,如果离开的话是Value的值不会有任何改变的。

    Reference配合无mutable:这种情况既可以修改,另外同时外面的Value值也随之改变。

    Referenve配合mutable:与第三种情况相同。

    接着我列出一段代码:

    void test_remove::test3()

    {

        std::vector<int> vi {5,28,31,46,245,59,24,36};

        int x = 30;

        int y = 50;

        vi.erase(std::remove_if(vi.begin(), vi.end(), [x,y](int n)->bool{

            return x<n && n<y;

        })

            );

     

        for (auto ele : vi) {

            std::cout<<"ele is:"<<ele<<std::endl;

        }

    }

     

    这里我要说明两点,第一,remove_if中的参数自动传入到int n当中去,所以是int,第二,注意没有声明仅仅写函数体的话是不加分号的。

    六、Lambda表达式的优越性

    最后说一下Lambda表达式的优越性。第一,Lambda表达式可以传入其他参数。第二,因为在函数体中实现的,所以思路比较清晰。

     

    以上就是我对Lambda表达式的研究。

  • 相关阅读:
    pku2226 Muddy Fields
    pku3715 Blue and Red
    关于二分图的最大权匹配
    pku 2262&& pku 2739 && pku 3006
    pku2060 Taxi Cab Scheme
    pku 1486 Sorting Slides
    id、css命名规范
    Git 常用命令
    sublime text3插件使用
    Java实现数据结构栈stack和队列Queue
  • 原文地址:https://www.cnblogs.com/songyuchen/p/14674083.html
Copyright © 2011-2022 走看看