c++ - c++ boost库中的累加器有什么用?

标签 c++ algorithm boost time-complexity

我刚刚阅读了 c++ 中的 boost 库指南。而且我没看懂累加器的部分。

在指南中它说每个累加器都可以拥有它的特征,例如 tag::min 或 tag::mean。如果您拥有这些功能,则可以使用 min 函数(宏)。

那么为什么我不能只在 STL 中使用 vector 并使用像 min_element(v.begin(), v.end()) 这样的算法呢?使用累加器有什么好处?

导游还写了字 “累加器复杂度 O(1) 提取器复杂度 O(1)”。 这意味着什么?它与时间复杂度有关吗?这就是累加器的优势吗?

最佳答案

如果您使用 vector ,则必须存储每个值。这需要内存,但对于累加器的预期任务,实际上不需要存储这些值——对于某些计算,您只需要在给出新值时更新少量状态。

您可以只编写一个节省空间的算法来执行计算而无需所有这些存储,或者您可以使用已经为您完成这项工作的累加器。

此外,accumulators 库提供了一些标准库没有的统计工具。

而且,是的,O(1) 表示“恒定时间复杂度”,这告诉我们这种方法的另一个重要好处 - 它的性能不会随着数字数量的增加而变差。

Here's a more in-depth explanation .

关于c++ - c++ boost库中的累加器有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913982/

相关文章:

c++ - 我如何在 C++ 中使用 'ToString()' 枚举?

c++ - 在哪些情况下我需要锁定变量以防止同时访问?

c++ - 为什么我的 map 打印全为零?

c - 数组中最低的 n 个数字

解决vendor machine 'change giving'问题的Java算法

c++ - 将 boost::lexical_cast 与 std::transform 一起使用

c++ - 为什么我们使用 "const char* const* argv"而不是 "char *"?

c - 为什么二进制搜索数组比二进制搜索树快一点?

c++ - skipper 在 boost::spirit 中不起作用

c++ - boost::numeric::ublas::vector<double> 和 double[]