gpt4 book ai didi

c++ - std::transform 可以替换为 std::accumulate 吗?

转载 作者:行者123 更新时间:2023-12-04 10:46:25 26 4
gpt4 key购买 nike

我有一个普遍的问题。我们可以随时更换std::transformstd::accumulate ?我在许多情况下/示例中都看到过这种替换。这在理论上是可能的,如果是,那么为什么 std::transform被介绍了?

最佳答案

这两种算法的目的完全不同。
std::accumulate在函数式编程世界中被称为折叠,它的目的是迭代序列的元素并对这些元素应用双参数折叠操作,一个参数是前一次折叠的结果,另一个是序列的元素。它自然地返回单个结果 - 将序列的所有元素折叠成一个值。

另一方面,std::transform将值从一个序列复制到另一个序列,对每个元素应用一元运算。它返回一个迭代器到序列的末尾。

您可以提供任何代码作为折叠操作的事实允许我们使用 std::accumulate作为通用循环替换,包括将值复制到其他容器的选项,但这是不明智的,因为引入这些(相当简单)算法的全部原因是使程序更加明确。使一个算法执行通常与另一个算法相关联的任务不太明确且违反直觉。

通用循环替换算法是 std::for_each ,但是对于循环范围,它在很大程度上已经过时了,而且我已经很长时间没有看到它的使用了。

关于c++ - std::transform 可以替换为 std::accumulate 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068770/

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