带参数的 Lambda
本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 43 课,共 56 课。
现在你已经了解了基本的 lambda 语法,接下来我们通过添加参数,让 lambda 更实用。和普通函数一样,lambda 可以接收输入值并进行处理。
要为 lambda 添加参数,请将它们放在捕获子句后面的括号内:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // 输出:Sum: 8参数语法与普通函数参数完全相同:先写类型,再写参数名称。你可以像上面那样用逗号分隔多个参数。
你也可以不保存 lambda,直接调用带参数的 lambda:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // 输出:Product: 28接受参数的能力让 lambda 更灵活,也更容易重复使用。你可以创建一些小函数,让它们在每次调用时处理不同的输入值。
挑战
简单编写一个程序,通过构建一个能执行不同数学运算的简单计算器,演示带参数的 lambda 表达式。本挑战将测试你对如何定义接收输入值并使用这些值的 lambda 表达式的理解。
将提供以下输入:
- 两个整数
num1和num2,表示用于计算的数字 - 一个字符
operation,表示要执行的数学运算
你的程序应当:
- 创建一个名为
add的 lambda 表达式,它接收两个整数参数,并按Sum: [result]的格式输出它们的和 - 创建一个名为
subtract的 lambda 表达式,它接收两个整数参数,并按Difference: [result]的格式输出它们的差 - 创建一个名为
multiply的 lambda 表达式,它接收两个整数参数,并按Product: [result]的格式输出它们的乘积 - 从输入中读取两个数字和运算字符
- 根据运算字符,使用这两个数字调用相应的 lambda 表达式
运算字符将是以下字符之一:
+表示加法(调用addlambda)-表示减法(调用subtractlambda)*表示乘法(调用multiplylambda)
根据运算使用以下确切的输出格式:
加法:
Sum: [result]减法:
Difference: [result]乘法:
Product: [result]请记住,lambda 参数定义在捕获子句后面的括号内,语法与普通函数参数相同。使用 auto 关键字将每个 lambda 存储在一个变量中,然后根据输入的运算字符,使用 if-else 语句或 switch 语句调用相应的 lambda。
亲手试试
#include <iostream>
using namespace std;
int main() {
// 读取输入
int num1, num2;
char operation;
cin >> num1 >> num2 >> operation;
// TODO:为加法、减法和乘法运算创建 lambda 表达式
// TODO:使用 if-else 或 switch 语句,根据运算类型调用对应的 lambda 表达式
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C++ 在线编译器