1

我正在使用 boost 累加器从 C++ 中的双精度向量中获取统计信息。每次我需要一个新的统计数据时,我都会调用一个自定义方法,通过创建累加器来获取它,用向量值加载它,最后使用 boost statistic 函数,例如。

double Entity::min(void) {
    accumulator_set< double, features< tag::min > > acc;
    // Now load the vector into the accumulator.
    acc = std::for_each( samples.begin(), samples.end(), acc );
    // Specify namespace to avoid name clash of this min method
    this->_min =  boost::accumulators::min(acc);
    return this->_min;
}
// etc. more methods for StdDev, mean, max etc.

我的问题是:每次以不同方法创建累加器是否都会重复(加上)向量内存要求?我知道我可以编写一个“getStatstics”方法来一次获取它们,但我特别想知道每次创建和加载累加器时是否使用至少与原始向量一样多的内存。

多谢你们

皮特

4

1 回答 1

1

您使用的算法适用于samples集合,它是 class 的一个属性Entity。该集合是矢量模板的一个实例。

std::for_each实例仅适用于集合的迭代器,这些迭代器在构造时传递 :samples.begin()samples.end().

标准迭代器专门设计用于抽象集合上的游标或指针的概念。它们不会以任何方式复制集合,因此您在使用它们时不必担心内存分配问题。

这里使用的具体accumulator_set也不会产生任何集合的副本。它只是访问迭代器,在当前最小候选和集合的当前指向值之间进行比较,并为下一次迭代保留两者的最佳值。

就目前而言,您使用的标准部件都不会复制该系列。

于 2013-04-10T16:38:03.380 回答