为什么 `accumulate` 没有进入 C++20 的范围?

38

我怀疑 accumulate 不是唯一一个被淘汰的算法。

也许现在有更好的方法来对范围进行累加(折叠),因此 accumulate 已经过时了吗?


“折叠”作为一种更好的累加方式是什么意思?你能举个例子吗? - BeeOnRope
1
现在还没有reduce,请参阅https://dev59.com/5VEG5IYBdhLWcg3wKFXw。 - alfC
2个回答

34
不,accumulate是一个完全合理的算法,并且它并没有被任何其他算法所取代。之所以没有包含在C++20中,仅仅是因为时间问题。考虑到范围方面的尽可能多的添加,而不必担心一次性添加所有内容,否则有可能会导致没有受限制的算法能够进入C++20,这将是令人遗憾的事情。
还有一些算法尚未受到约束,以及整个<numeric><memory>头文件。
幸运的是,有一个提案来添加这些剩余的算法(我对这些将在C++23中添加感到乐观)。实际上,这个提案的介绍很好地回答了你的问题:

“每当有人问我们为什么没有涵盖<numeric><memory>算法时:我们认为187页的TS已经足够了。” ——Casey Carter


4

std::ranges::fold_left 是对应的算法,已在 C++23 中添加。不幸的是,我不知道任何已经实现它的编译器。然而,从 cppreference 复制“可能的实现”确实可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接