0

C++11 では、なぜstd::for_each(lst.begin(), lst.end(), some_lambda);

と同じではありませんstd::transform(lst.begin(), lst.end(), lst.begin(), some_lambda);か?

2 番目のものは機能し、最初のものは何もしないようです。私は何かを見落としていますか?

ラムダの例:

auto some_lambda = [=] (std::string s) -> std::string {
  return "0" + s;
};

リストの例:

std::list<std::string> lst; lst.push_back("");
4

2 に答える 2

4

少し単純化すると、次のstd::for_eachようになります。

for (iter = start; iter != end; ++iter)
    f(*iter);

std::ransformこのようなものです:

for (iter = start; iter != end; ++iter, ++result)
    *result = f(*iter);

には別のバリエーションがありますtransformが、一般的な考え方はそのままです。

範囲内のすべてのアイテムで呼び出された後、関数オブジェクトを返すことに注意しstd::for_each てください。それに基づいて、関数オブジェクトで気になるものを何でも累積し、それが返された後にそこから累積値を取得することにより、それを平凡な模倣として使用できます。std::accumulate

于 2013-04-26T19:19:48.490 に答える
3

最初のものは、関数の戻り値を無視します。変更する場合は、参照を関数パラメーターとして使用します。

于 2013-04-26T19:07:06.093 に答える