栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++中的Lambda表达式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++中的Lambda表达式

C++中有  五种可调用对象:

1. 函数

2. 函数指针

3. lambda表达式

4. 重载了函数调用运算符的类

5. bind创建的对象

函数不能定义在另一个函数内, 但是 lambda表达式可以定义在函数内。

一.什么是 lambda表达式

        一个lambda表达式 表示一个可调用的代码单元,可理解为 一个未命名的内联函数。一个lambda表达式具有一个返回类型、一个参数列表 和 一个函数体。表达式形式如下:

        [capture list ] ( parameter list)  -> return type { function  body }

       capture list :  捕获列表, 一个lambda 所在函数中定义的局部变量的列表,通常为空

       return  type :  返回类型

       parameter list:参数列表

       function body: 函数体 

lambda 必须使用  尾置返回  来指定返回类型。 如果 忽略返回类型,lambda根据函数体中的代码推断出返回类型。

例如:

auto compare = [](const int a, const int b){ return a > b;}

二、lambda的调用

调用方式与普通函数的调用方式相同,都是使用调用运算符() :

1.不使用捕获列表

示例1:

#include 
#include
#include
#include
using namespace std;

int main()
{
    auto compare = [](const int a, const int b) {return a > b; };
    cout << "3 与 7的对比结果:"< 

运行结果是:

示例2:

sort函数,默认是从小到大排序,自定义按照string的大小进行排序

#include 
#include
#include
#include
using namespace std;

int main()
{
    vector mystring = {"a","egg","elephant","piggy","monkey","yellow","ahelkh","walawalawala"};


    sort(mystring.begin(), mystring.end(), [](const string a, const string b) {return a.size() > b.size(); });
    cout << "sort排序后的结果是:";
    for (auto mem:mystring)
    {
        cout << " " << mem;
    }
    cout << endl;

   
    system("pause");
    return 0;
}

运行结果:

2.使用捕获列表

lambda以一对 [ ] 开始,可以在其中提供一个以逗号分隔的名字列表 , 这些名字都是 它所在函数中定义的。

示例1:

#include 
#include
#include
#include
using namespace std;

int main()
{ 
    //使用捕获列表
    //
    string a = "hlloy high";
    string b = "what?";
    auto compare= [a,b](const string c)
    {
        return c.size() > a.size() && c.size() >b.size();
    };

    cout << compare("WoWwwww  you get one goald") << endl;

    system("pause");
    return 0;
}

运行结果是:

 示例2:

#include 
#include
#include
#include
using namespace std;

int main()
{
    vector mystring = {"a","egg","elephant","piggy","monkey","yellow","ahelkh","walawalawala"};

    //找到第一个大于6的字符串
    int sz = 6;
    auto wx = find_if(mystring.begin(), mystring.end(), [sz](const string a) {return  a.size() > sz; });
    cout <<"第一个大于 sz 大小的字符串是:"<< *wx << endl;


    system("pause");
    return 0;
}

 执行结果是:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号