このステートメントの影響は次のとおりです。
std::replace_if(ln.begin(),ln.end(),[=](int c){return c=='\n'||c==' ';},0);
具体的には、次のことを知りたいです。
の意味は何ですか
[=](int c){return c=='\n'||c==' ';}
この定義の文法はどこにありますか?
[=](int c){return c=='\n'||c==' ';}
名前のない関数オブジェクトを作成するラムダ式です。1 つのパラメーターで呼び出すことができ、ブール値を返します。角括弧は、いわゆる「キャプチャ句」を含む、いわゆる「ラムダ導入子」です。capture-clause は、ラムダ オブジェクトが周囲のローカル変数をキャプチャする方法をコンパイラに伝えます。
std::replace_if(ln.begin(),ln.end(),[=](int c){return c=='\n'||c==' ';},0);
replace_if は、シーケンス、ファンクター (より具体的には述語) およびその他の値に対して 2 つのイテレーターを取ります。呼び出されたシーケンスの要素を繰り返し処理しln
、指定された述語 (ラムダ式) がその要素に対して true を返す場合、各要素を 0 に置き換えます。
したがって、基本的に、このコード行は、各スペースと改行文字をln
ヌル ターミネータに置き換えます。
ラムダ関数です。名前がなく、コード内でインラインで定義されている関数。C++11 標準で C++ に追加されました。というわけで、比較的新しいです。
ここでそれらについて読むことができます
それはラムダです。c
コンテナ内の整数ln
を0
ifc == '\n'
またはに置き換えますc == ' '
。コンテナーは文字を保持しているように見えるため、基本的にはスペースと改行をヌル終了文字に置き換えると言えます。