C ++ - ラムダ式

シーンを使用したシンプル0 ---使用し、1つまたは2つの場所

独立した機能が、機能は比較的単純で、プロジェクト全体で一度だけ使用することができます(つまり、多重化が存在しない)ので、今回はラムダ式を使用した場合を考えることができます。

それは一度だけ使用し、その直接の書き込み、すべてのコードがすぐに目が覚めているので、なぜそれが機能しなければなりませんか? - ラムダは、ロ​​ーカル変数をキャプチャすることができますので

BOOL check_size(CONST  文字列&S、文字列:: size_typeのSZ)
{ 
    戻り s.size()> = SZ。
} // WC:第一个满足サイズ> SZ的元素
自動WC

= find_if(words.begin()、words.end()、[SZ](CONST 文字列&A){ 戻り a.size()> = SZ。 });

機能check_size()は、パラメータfind_ifとして使用することはできません。しかし、また、どのように検討する必要があります

 

参考ます。https://blog.csdn.net/qq_34199383/article/details/80469780

サイズの0.1比較

// 1.传统方法 
の#include <iostreamの> 
の#include <ベクトル> 
の#include <アルゴリズム>
 使用して 名前空間はstd; 

BOOL比較(INT&A、INTB)
{ 
    戻り > B。
} 

INTメイン(ボイド
{ 
    int型データ[ 6 ] = { 3412216 }。
    ベクトル < int型 >テストデータ。
    testdata.insert(testdata.begin()、データ、データ + 6。);
     // ソートアルゴリズムの 
    分類(testdata.begin()、testdata.end()、比較);     // 昇順

    リターン 0 ; 
} 
/ * *** ************************************** * / 
// 2.lambda表現 
する#include <入出力ストリーム> 
の#include <ベクトル> 
の#include <アルゴリズム>
 使用して 名前空間STD; 

INTメイン(ボイド
{ 
    INT [データ。6 ] = { 34。 12であり216 }。
    ベクトル < int型 > テストデータ。
    testdata.insert(testdata.begin()、データ、データ + 6 )。

    ソート(testdata.begin()、testdata.end()、[](INT A、INT B){ 戻り > Bを;}); 

    リターン 0 ; 
}

ラムダ式の戻り値を受け入れる0.2オート機能

書式#include <iostreamの> 
の#include <機能>
 使用して 名前空間はstdを、

INTメイン(ボイド
{ 
    int型、X = 8、Y = 9 
    自動追加 = [](INT A、INT B){ 返す + Bと、}。
    std ::関数 < INTINTINT)>追加= [=](int型int型の {B)を返す + B。}。

    裁判所未満 << を追加します。<<追加(X、Y)<< ENDL; // 17 
    COUT << " 追加:" <<追加(X、Y)<< ENDL; // 17 

    戻り 0 ; 
}

0.3ラムダ式は、再帰的なアルゴリズムを使用して達成されます

書式#include <iostreamの> 
の#include <機能>
 使用して 名前空間はstdを、

INTメイン(ボイド
{ 
    のstd ::関数 < INTINT)>再帰= [&再帰](int型N){ 
         戻り N < 21:再帰(N - 1)+再帰(N - 2 )。
    }。

    // 我们来检测下我们的结果 
    COUT << " 再帰(2):" <<再帰(2)<< ENDL; // 2 
    COUT <<再帰(3):" <<再帰(3)<< ENDL; // 3 
    COUT << " 再帰(4): <<再帰(4)<< ENDL; // 5 

    戻り 0 ; 
}

 

1.エッセンス:無名のインライン

[キャプチャリスト(パラメータリスト) - > 戻り
{ 
    関数本体
} 
// キャプチャリスト取り込みリスト、通常空で定義されたローカル変数のリスト
 // 端が--return返す設定する必要がラムダ式**

2.あなたは、パラメータリストの戻り値の型を無視することができますが、リストには含まれており、関数本体をキャプチャする必要があります

オートF = [] { 返す 42 ;}

3.キャプチャリスト

自動WC = find_if(words.begin()、words.end()、[SZ](CONST  文字列&A){ 戻り a.size()> = SZ;});

 4.可変方法がとら

  • []任意の変数を取られていません
  • [b]スコープすべての変数は、外部取り出し、機能の本体内の基準として使用します
  • [=]範囲外ボディ内のすべての変数、及びコピー機能を講じ
  • [=、&フー]範囲外のコピー機能と本体で使用されるすべての変数を採取するが、参照変数fooの使用
  • [バー]バー取られ、他の変数が取られていない間の変数は、体重のコピー機能で使用されます
  • [これ]は、現在のクラスにこのポインタを取ら。デフォルト&や=を使用している場合は、このオプションを追加します。

 

参考:

https://www.cnblogs.com/smiler/p/4095723.html

 

5.戻り値の型:単一のreturn文;マルチステートメントのデフォルトに戻り、ボイド、それ以外の場合はエラーには、戻り値の型を指定する必要があります

// 正しい単一のreturnステートメント 
変換((、vi.begin()vi.beginをvi.endを())、[](INT I){ 
     リターン Iの< 0? - ; Iは、Iを})

// エラー。戻り値の型を推論することができない 
変換(、)(、)(vi.endをvi.beginをvi.begin()、[](int型I){ 
     IF(I < 0リターン - I;
     他の リターン; I})

// 正しいです戻り型が設定されているのは、エンド 
変換(vi.begin()、vi.end()、vi.begin()、[](INT > - I)INT 
{      IF(I < 0リターン - 、I
     他の リターン 私;})

 

6.bind()

std ::プレースホルダを7.using :: _ 1。

おすすめ

転載: www.cnblogs.com/yrm1160029237/p/11494965.html