当前位置:首页 > 科技  > 软件

C++使用Lambda表达式实例讲解

来源: 责编: 时间:2023-11-02 09:09:01 175观看
导读C++ 中的 Lambda 表达式是一种匿名函数,可以方便地创建并传递函数对象。这是 C++11 引入的一项重要功能,可以大大提高代码的可读性和简洁性。以下是一个深入讲解 C++ 使用 Lambda 表达式的例子,包括基本语法、捕获列表、

c6F28资讯网——每日最新资讯28at.com

C++ 中的 Lambda 表达式是一种匿名函数,可以方便地创建并传递函数对象。这是 C++11 引入的一项重要功能,可以大大提高代码的可读性和简洁性。c6F28资讯网——每日最新资讯28at.com

以下是一个深入讲解 C++ 使用 Lambda 表达式的例子,包括基本语法、捕获列表、函数调用、以及与 STL 的结合使用等。c6F28资讯网——每日最新资讯28at.com

Lambda基本语法

首先,我们来看一个最简单的 lambda 表达式:c6F28资讯网——每日最新资讯28at.com

[](){/* do nothing */};

这个 lambda 表达式定义了一个空函数,没有参数,也没有返回值。你可以将其看作是一个没有实体的具名函数。c6F28资讯网——每日最新资讯28at.com

你还可以定义带有参数的 lambda 表达式:c6F28资讯网——每日最新资讯28at.com

[](int a, float b){return a + b;};

这个函数接收两个参数,一个是 int 类型的 a,另一个是 float 类型的 b。它的返回值是 a  b 的和。c6F28资讯网——每日最新资讯28at.com

你也可以定义带有默认参数的 lambda 表达式:c6F28资讯网——每日最新资讯28at.com

[](int a, float b = 0.0f){return a + b;};

这个函数和上一个函数功能基本相同,只是 b 参数的默认值是 0.0fc6F28资讯网——每日最新资讯28at.com

Lambda的捕获列表

你还可以在 lambda 表达式中捕获外部变量的值:c6F28资讯网——每日最新资讯28at.com

int a = 10;float b = 20.0f;auto add = [&a, &b]() { return a + b; }; // 使用引用捕获外部变量std::cout << add() << std::endl; // 输出 30

在这个例子中,&a  &b 是通过引用来捕获 a  b 的值的。这意味着 lambda 表达式可以修改捕获的变量的值。如果你只想在 lambda 表达式中使用外部变量的值,而不修改它们的值,你应该使用值捕获而不是引用捕获。例如:c6F28资讯网——每日最新资讯28at.com

int a = 10;float b = 20.0f;auto add = [a, b]() { return a + b; }; // 使用值捕获外部变量std::cout << add() << std::endl; // 输出 30

在这个例子中,虽然 a  b 的值被传递给了 lambda 表达式,但是 lambda 表达式并不能修改它们的值。c6F28资讯网——每日最新资讯28at.com

Lambda与函数调用

你可以将 lambda 表达式作为一个函数参数传递给其他函数。例如,你可以使用一个 lambda 表达式来作为 std::sort 函数的比较函数:c6F28资讯网——每日最新资讯28at.com

std::vector<int> v = {5, 3, 1, 4, 2};std::sort(v.begin(), v.end(), [](int a, int b) {return a < b;}); // 使用 lambda 表达式作为比较函数std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; // 输出 1 2 3 4 5

在这个例子中,lambda 表达式 [](int a, int b) {return a < b;} 被传递给了 std::sort 函数,用于比较 v 中的元素。这意味着你可以用 lambda 表达式来实现自定义的算法和数据结构。c6F28资讯网——每日最新资讯28at.com

Lambda与 STL 的结合使用

下面我们再来看一个比较复杂但很有用的例子:使用 lambda 表达式和 STL 来查找一个 vector 中第一个出现的不重复的元素:c6F28资讯网——每日最新资讯28at.com

#include <iostream>#include <vector>#include <algorithm>#include <unordered_set>int main() {    std::vector<int> v = {1, 2, 3, 2, 4, 3, 5, 6, 4};    auto it = std::find_if(v.begin(), v.end(), [&](int a) {    	return std::find(std::begin(un), std::end(un), a) == std::end(un);    });    }

在这个例子中,我们使用了一个较为复杂的 lambda 表达式来作为 std::find_if 函数的比较函数。这个 lambda 表达式接收一个参数 a,然后使用一个名为 un  std::unordered_set 来查找 a 是否第一次出现。这个例子展示了如何使用 lambda 表达式和 STL 来解决一个复杂的问题。c6F28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16511-0.htmlC++使用Lambda表达式实例讲解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 聊一聊 Python 的换行以及转义

下一篇: 不是吧?这 十个 React UI 组件库你不会还不知道吧?

标签:
  • 热门焦点
Top