gpt4 book ai didi

c++ - std::transform 与 std::for_each 不同吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:22:09 25 4
gpt4 key购买 nike

在 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("");

最佳答案

稍微简化一下,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 的平庸模仿,通过在函数对象中累积您关心的任何内容,并从中检索累积值归还后。

关于c++ - std::transform 与 std::for_each 不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16243527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com