我刚刚阅读了c++中Boost库的指南。而且我不了解累加器的一部分。
在指南中,它说每个累加器都可以拥有其功能,例如tag::min或tag::mean。如果您拥有这些功能,则可以使用min函数(宏)。
那么,为什么不能只在STL中使用 vector 并使用min_element(v.begin(),v.end())之类的算法?使用累加器有什么好处?
指南也写了几句话
“累加器复杂度O(1)
提取器复杂度O(1)”。
那是什么意思?它与时间复杂度有关吗?这是蓄能器的优势吗?
最佳答案
如果使用 vector ,则必须存储每个值。这会占用内存,但是对于累加器要执行的任务,实际上并不需要存储这些值-对于某些计算,只需要在给出新值时更新少量状态即可。
您可以只编写一种节省空间的算法来执行计算而无需所有存储,也可以使用为您完成工作的累加器。
此外,累加器库提供了一些标准库所没有的统计工具。
而且,是的,O(1)表示“恒定时间复杂度”,这告诉我们该方法的另一个重要好处-随着数量的增加,其性能不会变差。
Here's a more in-depth explanation。