lambda

举报
无敌清风蓝 发表于 2023/06/13 13:51:45 2023/06/13
【摘要】 lambda

1.介绍

lambda 函数是 C++11 引入的一种新特性,它允许你定义一个匿名的函数对象,可以用来作为参数传递给其他函数或算法。lambda 函数的语法非常简洁,可以让你在不定义完整函数的情况下快速实现简单的功能。

lambda 函数的语法如下:

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

其中,capture list 是捕获列表,用于指定 lambda 函数可以访问哪些外部变量;parameters 是参数列表,与普通函数的参数列表相同;return type 是返回类型,可以省略,编译器会自动推断;function body 是函数体,包含 lambda 函数的实现。

2.例子

下面是一个简单的示例,演示如何使用 lambda 函数:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};

    int sum = 0;
    std::for_each(v.begin(), v.end(), [&sum](int x) {
        sum += x;
    });

    std::cout << "Sum: " << sum << std::endl;

    return 0;
}

在这个示例中,我们定义了一个 std::vector 对象 v,并使用 std::for_each() 算法遍历它。std::for_each() 算法接受一个函数对象作为参数,并对容器中的每个元素调用这个函数对象。

我们使用 lambda 函数作为 std::for_each() 算法的第三个参数。这个 lambda 函数接受一个整数参数 x,并将其累加到外部变量 sum 中。由于我们需要在 lambda 函数中修改外部变量 sum 的值,所以我们在捕获列表中使用了引用捕获 [&sum]

这段代码的输出结果是:

Sum: 15

注意捕获列表是可选的,如果不需要访问外部变量,那么可以省略捕获列表。例如:

std::thread t([](){
    std::cout << "Hello from thread" << std::endl;
});

在这个示例中,我们创建了一个线程 t,它执行一个没有捕获列表的 lambda 函数。这个 lambda 函数输出一行文本,然后结束。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。