为什么"累积"没有进入 20 C++的范围?

Why didn't `accumulate` make it into Ranges for C++20?

本文关键字:C++ 范围 累积 为什么      更新时间:2024-03-29

我怀疑accumulate并不是唯一没有成功的算法

也许现在有一种更好的方法可以在一定范围内进行累积(折叠(,因此accumulate已经过时了?

不,accumulate是一个非常合理的算法,它没有被任何其他算法淘汰。它没有包含在C++20中的原因只是时间问题。人们认为最好在范围方面尽可能多地添加,而不用担心一次添加所有。否则,就有一种风险,即none的受约束算法都无法进入C++20,这将是一种耻辱。

仍然有一些算法尚未受到约束,以及整个<numeric><memory>标头。

幸运的是,有人提议添加这些剩余的算法(我很乐观,这些算法将在C++23中添加(。事实上,这个提案的介绍很好地回答了你的问题:

"每次有人问我们为什么没有涵盖<numeric><memory>算法:我们认为187页的TS就足够了。"--Casey Carter

std::ranges::fold_left是相应的算法,添加在C++23中。不幸的是,我不知道有哪个编译器已经实现了它;可能的实现";来自cppreference确实有效。