C++11匿名関数(lambda関数、lambda式)

5484 ワード

Lambda式の定義形式は次のとおりです.
// [           ] (   ) ->       {   }
[capture](parameters)->return-type{body}

次のようになります.
  • 「外部変数アクセス方式説明子」は、{}で使用される、{}の外側に定義された変数が{}で変更を許可するか否かを表す=または&であってもよい.
  • は、{}において、外部に定義された変数を使用しなくてもよい.
  • パラメータがない場合、空のカッコ()は
  • を省略できます.
  • "->戻り値タイプ"は省略できます.

  • 具体的な意味は以下の通りです.
    []        //     .   Lambda              .
    [x, &y]   //x     , y      .
    [&]       //                 
    [=]       //                
    [&, x]    //x       .          
    [=, &z]   //z     .         
    

    例:次は合法的なLambda式です.
    [=] (int x, int y) -> bool {return x%10 < y%10;}
    

    Lambda式は実際には関数ですが、名前はありません.次のセグメントでは、Lambda式を使用します.
    int a[4] = {11, 2, 33, 4};
    sort(a, a+4, [=](int x, int y) -> bool { return x%10 < y%10; } );
    for_each(a, a+4, [=](int x) { cout << x << " ";} );
    

    この区間の出力結果は:11 2 33 4