C++11新特性之Lambda表达式

在新出的C++11的新特性中新增了Lambda表达式,Lambda表达式是一种简洁的方式来创建匿名函数,通常用于需要一个函数,函数也比较简单,只需要一行代码来定义。Lambda表达式可以在不需要定义命名函数的情况下直接创建一个函数对象。使用非常方便,不需要再去声明和定义函数。

在C++中Lambda表达式的语法形式为:[capture](parameters) -> return_type { body }

解析如下:

  • capture:捕获外部变量的列表,可以通过值或引用捕获。
  • parameters:参数列表,与普通函数的参数列表相同。
  • return_type:返回类型(可以省略,编译器会自动推导)。
  • body:函数体,包含要执行的代码。

举一个简单的栗子:

int main()

{
    auto add = [](int x, int y) -> int

{
        return x + y;
    };

    int result = add(3, 5);
    std::cout << "Result: " << result << std::endl; // 输出:Result: 8

    return 0;
}
在这个栗子中,[](int x, int y) -> int { return x + y; } 定义了一个lambda表达式,捕获列表为空,参数为 int xint y,返回类型为 int。这个lambda表达式被赋值给变量 add,然后调用 add(3, 5) 来计算 3 + 5 的结果。

捕获外部变量的栗子:

int main()

{
    int a = 5;
    int b = 3;

    auto add = [a, b]() -> int

{
        return a + b;
    };

    std::cout << "Result: " << add() << std::endl; // 输出:Result: 8

    return 0;
}
在这个栗子中,lambda表达式通过捕获列表 [a, b] 捕获了外部变量 ab,然后在函数体内使用这两个变量。

捕获外部变量并修改的栗子:

如果需要在lambda表达式中修改捕获的外部变量,可以通过引用捕获

#include <iostream>

int main()

{
    int a = 5;

    auto increment = [&a]()

{
        a++;
    };

    increment();
    std::cout << "a: " << a << std::endl; // 输出:a: 6

    return 0;
}
在这个栗子中,lambda表达式通过捕获列表 [&a] 通过引用捕获变量 a,因此在lambda表达式中对 a 的修改会影响到外部的 a

在STL算法中使用Lambda表达式

lambda表达式在STL算法中非常有用,例如 std::sort

int main()

{ std::vector<int> vec = {5, 2, 8, 1, 3};

std::sort(vec.begin(), vec.end(), [](int a, int b)

{ return a < b; });

for (int n : vec)

{ std::cout << n << ' '; }

// 输出:1 2 3 5 8

return 0; }

在这个栗子中,Lambda表达式 [](int a, int b) { return a < b; } 被用作 std::sort 函数的比较函数,用于对向量进行升序排序。

这些栗子展示了C++中Lambda表达式的基本用法,以及如何在不同的场景中应用它们,希望对大家有所帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值