2

このステートメントの影響は次のとおりです。

std::replace_if(ln.begin(),ln.end(),[=](int c){return c=='\n'||c==' ';},0);

具体的には、次のことを知りたいです。

の意味は何ですか

[=](int c){return c=='\n'||c==' ';}

この定義の文法はどこにありますか?

4

3 に答える 3

2

[=](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ヌル ターミネータに置き換えます。

于 2013-02-27T12:00:58.713 に答える
1

ラムダ関数です。名前がなく、コード内でインラインで定義されている関数。C++11 標準で C++ に追加されました。というわけで、比較的新しいです。

ここでそれらについて読むことができます

于 2013-02-27T08:33:41.050 に答える
1

それはラムダです。cコンテナ内の整数ln0ifc == '\n'またはに置き換えますc == ' '。コンテナーは文字を保持しているように見えるため、基本的にはスペースと改行をヌル終了文字に置き換えると言えます。

于 2013-02-27T08:33:52.747 に答える