第二十六课:理解C++中的Lambda表达式
学习目标:
- 掌握Lambda表达式的基本语法和概念。
- 学习如何在C++代码中使用Lambda表达式。
- 理解Lambda表达式可以简化哪些编程任务。
学习内容:
-
Lambda表达式概念:
- Lambda表达式是一种定义匿名函数对象的方法,在C++11及其后续版本中被引入。
- 通常用于作为参数传递给算法,或者用于定义在局部作用域中的小函数。
-
Lambda基本语法:
- Lambda表达式的基本形式如下:
[capture](parameters) -> return_type { body } 。 capture 是捕获列表,用于指定哪些变量被捕获以及如何捕获(按值或按引用)。parameters 是参数列表,与普通函数的参数列表类似。return_type 是返回类型,可以不指定,由编译器自动推断。body 是Lambda函数体,包含了函数的实现代码。
auto lambda = [](int a, int b) -> int { return a + b; }; std::cout << lambda(5, 3); // 输出: 8
- Lambda表达式的基本形式如下:
-
捕获列表详解:
[] 不捕获任何外部变量。[=] 按值捕获所有外部变量。[&] 按引用捕获所有外部变量。[x] 只按值捕获外部变量x 。[&x] 只按引用捕获外部变量x 。[=, &x] 按值捕获所有外部变量,但是x 是按引用捕获。
int x = 4; auto lambda = [x](int y) { return x * y; }; std::cout << lambda(5); // 输出: 20
-
常见用途:
- Lambda表达式常用于标准库算法,如
std::sort 、std::for_each 等。 - 可以用来定义回调函数。
- 使得代码更加简洁,无需定义单独的函数或者函数对象。
- Lambda表达式常用于标准库算法,如
练习题:
编写一个C++程序,使用Lambda表达式对一个
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> v = {4, 1, 3, 5, 2}; // 使用Lambda表达式排序 std::sort(v.begin(), v.end(), [](int a, int b) { return a < b; }); // 使用Lambda表达式打印每个元素 std::for_each(v.begin(), v.end(), [](int i) { std::cout << i << ' '; }); return 0; } // 预计输出效果 // 1 2 3 4 5
答案解析:
本练习中,我们先创建了一个
目录
第二十七课 数据结构入门 - 数组与链表