C++中lambda的使用

这是我在做题过程中碰见高手写了一个这样的代码,然后来学习的。

匿名函数对象还是挺有用的,很方便。

    std::string str;
    std::cin >> str;
    //提供一个匿名函数用于判断字符是不是奇数
    std::count_if(str.begin(), str.end(), [](char c) {
        return (c - '0') & 1

    });

Lambda 表达式(Lambda Expression)是 C++11 引入的一个特性,它允许你创建匿名函数对象。Lambda 表达式提供了一种简洁的方式来定义一个函数,而不需要显式地定义一个函数类型或者函数名。Lambda 表达式通常用于临时创建一个小型的、一次性的函数,这些函数可以捕获(capture)其创建时所在作用域的变量。

Lambda 表达式的一般语法如下:

[] (参数列表) -> 返回类型 { // 函数体 }

  • [] 是 Lambda 表达式的开始,它定义了捕获列表。捕获列表指定了哪些外部变量可以在 Lambda 表达式内部使用。
  • 参数列表 是 Lambda 表达式的输入参数,类似于普通函数的参数列表。如果 Lambda 不需要任何参数,参数列表可以为空。
  • -> 指定了 Lambda 表达式的返回类型。如果 Lambda 表达式包含一个单一的返回语句,且没有返回值,可以省略返回类型,编译器会根据上下文推断返回类型。
  • Lambda 表达式的主体是一段代码块,它定义了 Lambda 表达式的行为。

Lambda 表达式可以捕获其创建时所在作用域的变量,这些变量可以按值(by value)或按引用(by reference)被捕获。捕获方式可以在捕获列表中指定。

以下是一些 Lambda 表达式的示例:

// 没有参数,没有返回值的 Lambda 表达式
auto lambda1 = [] {
    std::cout << "Hello, World!" << std::endl;
};

// 带参数的 Lambda 表达式
auto lambda2 = [](int a, int b) -> int {
    return a + b;
};

// 捕获外部变量的 Lambda 表达式
int x = 10;
auto lambda3 = [x]() {
    std::cout << "The value of x is: " << x << std::endl;
};

// 捕获变量 x 按引用,并修改它
auto lambda4 = [&x]() {
    x = 20;
    std::cout << "Changed the value of x to: " << x << std::endl;
};

Lambda 表达式在 STL 算法(如 std::sortstd::for_each 等)中非常有用,因为它们允许你传递一个自定义的函数作为参数。此外,Lambda 表达式也常用于并发编程、事件处理和回调函数等场景。

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值