Lambda 関数 - Lambda 関数は、メイン プログラムの範囲外での実装を必要としないインライン関数です。
Lambda 関数は、保存する変数の値として使用することもできます。ラムダは、関数によって呼び出すことができるオブジェクト (ファンクターと呼ばれます) と呼ぶことができます。
コンパイラはラムダ関数の定義に遭遇すると、通常、カスタム ラムダ オブジェクトを作成します。
ラムダ関数には、使用された変数をキャプチャするキャプチャ メソッドがあるなど、通常の関数よりも多くの機能があります。ただし、キャプチャされた変数はオブジェクトのメンバーとして扱われます。
ラムダ関数は「関数オブジェクト」とも呼ばれ、独自のスコープを持ち、通常の関数内のパラメーターとして渡すことができます。関数。 Lambda 関数には独自のライフサイクルがあります。
[ ] - キャプチャ
( ) - パラメータ (オプション)
→ - 戻り値値 (オプション)
{...} - 関数本体。
[ ]( int a) -> int { return a-1 ;};
Capture – Capture は、ラムダ関数が特定のスコープまたはネストされたブロックで使用可能な変数にアクセスできる句です。
利用可能な変数を取得する 2 つのメソッドを使用して特定の値をキャプチャできます:
名前によるオブジェクトのキャプチャ – 名前によるオブジェクトのキャプチャname will オブジェクトのローカルコピーを生成するラムダ関数。
この概念は、次の例で理解できます。 -
int main(){ set s; //Adding the elements to set int i=20; for_each(s.begin(),s.end(), [i](T& elem){ cout<<elem.getVal()*i<<endl; } }
上の例では、ラムダ関数のローカル コピーを作成することによって値が取得されます。
参照によるオブジェクトのキャプチャ – 参照によるオブジェクトのキャプチャにより、ラムダ関数のコンテキストを操作できるようになります。したがって、関数オブジェクトまたはラムダ関数によって取得される値は変更される可能性があります。
次の例でこれを理解できます。
int main(){ sets; //Adding elements to the set int result=0; for_each(s.begin(),s.end(), [&result](&T elem){ result+= elem.getVal();}); cout<<result<<endl; }
ラムダ関数は、使用される通常の関数の内部に存在できることがわかります。パラメータとして。たとえば、
class func{ public: func(set<T>s): s1(s){} void func(){ remove_if(s1.begin(),s1.end(), [this](int i) ->bool {return (i<level);}); } private: set<T>s1; int result; };
以上がC/C++ における Lambda 関数の意味の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。