0

在 C++11 中,为什么是std::for_each(lst.begin(), lst.end(), some_lambda);

不一样std::transform(lst.begin(), lst.end(), lst.begin(), some_lambda);

第二个有效,第一个似乎什么也没做。我忽略了什么吗?

一个示例 lambda:

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 回答