Lambda 関数は、関数内で関数オブジェクトをすばやく定義できる匿名関数オブジェクトです。 C の Lambda 関数は C 11 標準で導入され、コード作成を大幅に簡素化し、プログラムの可読性と保守性を向上させることができます。
Lambda 関数の構文は次のとおりです:
[capture list] (parameter list) -> return type { function body }
このうち、キャプチャ リストは外部変数をキャプチャするために使用される Lambda 関数のキャプチャ リストであり、パラメータ リストはパラメータです。リストはパラメータを渡すために使用され、戻り値の型は戻り値の型を指定するために使用され、関数本体は関数の操作を実装するために使用される関数本体です。
次は、単純な Lambda 関数の例です:
auto add = [](int a, int b) -> int { return a + b; };
上の例では、Lambda 関数は auto キーワードを使用して、Lambda 関数の戻り値を格納する変数 add を定義します。 。 Lambda 関数は 2 つのパラメータ a と b を受け取り、それらの合計を返します。 -> int は、Lambda 関数が整数型を返すことを指定します。
Lambda 関数は通常、アルゴリズム関数、STL コンテナーなど、関数オブジェクトを渡す必要がある場所で使用されます。以下は、Lambda 関数のいくつかのアプリケーション シナリオです。
C 標準ライブラリのアルゴリズム関数は通常、関数オブジェクトをパラメータとして受け取り、コンテナ内の要素を操作するために使用されます。 Lambda 関数は、アルゴリズム関数で一時関数オブジェクトをすばやく定義できます。
たとえば、次のコードは Lambda 関数を使用して std::for_each アルゴリズム関数を実装し、コンテナを走査します。
std::vector<int> vec = {1, 2, 3, 4, 5}; std::for_each(vec.begin(), vec.end(), [](int value) { std::cout << value << " "; });
このうち、Lambda 関数は、各要素を出力するために使用されます。コンテナ。
STL コンテナ内の要素は通常、オブジェクト型であり、要素は Lambda 関数を通じて並べ替え、検索などを行うことができます。
たとえば、次のコードは Lambda 関数を使用してベクター コンテナを並べ替えます:
std::vector<int> vec = {3,1,2,5,4}; std::sort(vec.begin(), vec.end(), [](int a, int b) { return a < b; });
このうち、Lambda 関数は、2 つの要素間のサイズ関係の比較を指定して決定します。コンテナ内のそれらの位置、相対位置。
マルチスレッド プログラミングでは、Lambda 関数を使用してスレッド関数を定義し、スレッド操作ロジックを実装できます。
たとえば、次のコードは Lambda 関数を使用して新しいスレッドを作成します。
std::thread t([]() { std::cout << "New thread" << std::endl; }); t.join();
その中で、Lambda 関数は新しいスレッドの実行ロジックを定義するために使用されます。
GUI プログラミングでは、Lambda 関数を使用してコントロール オブジェクトをキャプチャし、イベント応答関数を実装できます。
たとえば、次のコードは Lambda 関数を使用してボタン クリック イベントに応答します:
QPushButton *button = new QPushButton("Click me"); connect(button, &QPushButton::clicked, [=] { std::cout << "Button clicked" << std::endl; });
このうち、Lambda 関数はボタン クリック イベントに応答して関連する操作を実行するために使用されます。 。
一般に、Lambda 関数は、コードの作成を簡素化し、プログラムの可読性と保守性を向上させる、非常に便利なプログラミング構文です。アルゴリズム関数、STL コンテナ、マルチスレッド プログラミング、GUI プログラミングで広く使用されています。
以上がC++ での Lambda 関数とそのアプリケーション シナリオの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。