引数を持つラムダ式
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 43/56。
基本的なラムダ式の構文を理解したところで、パラメータを追加してラムダ式をより便利にしてみましょう。通常の関数と同じように、ラムダ式も処理のための入力値を受け取ることができます。
ラムダ式にパラメータを追加するには、キャプチャ句の後の括弧内に配置します:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // 出力: Sum: 8パラメータの構文は、通常の関数のパラメータとまったく同じように機能します。型を指定し、その後にパラメータ名を指定します。上記のように、カンマで区切って複数のパラメータを指定することもできます。
ラムダを変数に格納せずに、引数を渡して即座に呼び出すこともできます:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // 出力: Product: 28パラメータを受け取るこの能力により、ラムダはより柔軟で再利用可能になり、呼び出されるたびに異なる入力値を処理できる小さな関数を作成できるようになります。
チャレンジ
簡単異なる数学的演算を実行するシンプルな計算機を構築することで、パラメータを持つラムダ式を実証するプログラムを作成してください。このチャレンジでは、入力値を受け取り、それらを処理するラムダ式を定義する方法についての理解をテストします。
以下の入力が提供されます:
- 計算に使用する2つの整数
num1とnum2 - 実行する数学的演算を表す文字
operation
プログラムは以下のことを行う必要があります:
- 2つの整数パラメータを受け取り、その和を
Sum: [result]の形式で出力するaddという名前のラムダ式を作成します。 - 2つの整数パラメータを受け取り、その差を
Difference: [result]の形式で出力するsubtractという名前のラムダ式を作成します。 - 2つの整数パラメータを受け取り、その積を
Product: [result]の形式で出力するmultiplyという名前のラムダ式を作成します。 - 入力から2つの数値と演算文字を読み取ります。
- 演算文字に基づいて、2つの数値を引数として適切なラムダを呼び出します。
演算文字は以下のいずれかです:
- 加算の場合は
+(addラムダを呼び出す) - 減算の場合は
-(subtractラムダを呼び出す) - 乗算の場合は
*(multiplyラムダを呼び出す)
演算に基づいて、以下の正確な出力形式を使用してください:
加算の場合:
Sum: [result]減算の場合:
Difference: [result]乗算の場合:
Product: [result]ラムダのパラメータは、通常の関数のパラメータと同じ構文を使用して、キャプチャ句の後の括弧内に定義されることを忘れないでください。auto キーワードを使用して各ラムダを変数に格納し、if-else文またはswitch文を使用して、入力された演算文字に基づいて適切なラムダを呼び出してください。
チートシート
ラムダ式は、キャプチャ句の後の括弧内にパラメータを記述することで、パラメータを受け取ることができます。
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // 出力: Sum: 8パラメータの構文は通常の関数のパラメータと全く同じように機能します。型の後にパラメータ名を指定します。複数のパラメータはカンマで区切ります。
ラムダを変数に格納せずに、パラメータを渡して即座に呼び出すこともできます。
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // 出力: Product: 28自分で試してみよう
#include <iostream>
using namespace std;
int main() {
// 入力を読み込む
int num1, num2;
char operation;
cin >> num1 >> num2 >> operation;
// TODO: 加算、減算、乗算の操作のためのラムダ式を作成する
// TODO: 演算に基づいて適切なラムダを呼び出すために、if-else または switch 文を使用する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。