C++学习笔记总结练习: lambda表达式

本文介绍了Lambda表达式的基础概念,如对象分类、可调用对象和捕获列表,展示了不同形式的Lambda定义,包括无参、有参和有返回值的实例。此外,还讲解了如何使用Lambda表达式配合find_if和for_each算法,以及bind参数绑定的作用以复用操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lambda表达式

1 简介

对象分类

对象的分类

  • 基础类型的对象
  • 复合类型的对象
  • 类类型的对象
  • 函数对象

可调用对象

可调用对象是可以使用函数调用运算符()的对象。

  • 函数
  • 函数指针
  • 重载了函数调用运算符的类
  • lambda表达式

2 使用

Lambda表达式定义

  • 形式。仅仅是形式上不同的函数。capture list捕获列表是外部的局部变量的列表,捕获后可以在函数内部使用。
[capture list](parameter list) -> return type {function body}
  • 没有参数和返回值的lambda表达式
auto l=[]{
    cout<<"hello world"<<endl;
}
  • lambda表达式的定义完成后直接调用
[]{ cout<<"helloworld"<<endl;}();
  • 有参数的lambda表达式
auto l = [](int a,int b){cout<<a+b<<endl;};
  • 有返回值的lambda表达式
auto l = [](int m,int n)->int{cout<<m+n<<endl;return m+n;};

lambda表达式的调用

  • 使用调用运算符进行调用
auto f = []{return 42;};
cout<<f()<<endl;
  • 使用lambda表达式和find_if算法
//使用find_if和lambda表达式
    vector<string> words={"abc","a","bc","feiao"};
    int sz =4;
    auto wc = find_if(words.begin(),words.end(),
        [sz](const string &a){
            return a.size()>=sz;
        }
    );
    cout<<(*wc)<<endl;
    return 0;
  • 使用lambda表达式和for_each算法
// for_each给每一个元素的操作
    int sz2 = 3;
    for_each(words.begin(),words.end(),
        [sz2](const string&a){
            if(a.size()>=sz2){
                cout<<a<<endl;
            }
        }
    );

捕获列表

  • 捕获列表的捕获方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V04IXqET-1691409438684)(image/2021-03-06-14-01-43.png)]

int a = 1;
auto f = [&a]{
    return a;
};

返回类型

可以指定返回值的类型。

  • 单个返回语句可以推断返回类型,不需要指定返回值类型
  • 多个返回语句无法推断。需要指定返回类型。
transoform(vi.begin(),vi.end(),vi.begin(),
    [](int i)->int{
        if(i<0)return -i;
        else return i;
    }
);

3 bind 参数绑定

lambda 表达式通常只在一个地方使用的简单操作。如果需要在多个地方使用相同的操作,通常定义一个函数,而不是多次编写相同的lambda表达式。

bind函数适配器,接受一个函数对象,生成一个行的可调用的对象。

auto newCallable = bind(callable,arg_list);
auto g = bind(f,a,b,_2,c,_1);
  • _1,_2分别表示新函数g的第一个和第二参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onnx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值