我正在使用boost accumulators从C ++中的双精度矢量中获取统计数据。 每次我需要一个新的统计数据时,我都会调用一个自定义方法,通过创建累加器,使用向量值加载它并最后使用boost统计函数来获取它。
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'方法,它可以同时获取所有这些方法,但我特别想知道累加器的创建和加载是否每次使用至少与原始向量一样多的内存。
谢谢你们
皮特
答案 0 :(得分:1)
您使用的算法适用于samples
集合,该集合是类Entity
的属性。该集合是矢量模板的一个实例。
std::for_each
实例仅适用于集合的迭代器,它们在构造时传递:samples.begin()
和samples.end()
。
标准迭代器专门用于抽象集合上的游标或指针的概念。它们不会以任何方式复制集合,因此在使用它们时不必担心内存分配问题。
此处使用的特定accumulator_set
也不会生成该集合的任何副本。它只是访问迭代器,在当前最小候选者和集合的当前指向值之间进行比较,并在下一次迭代中保持两者的最佳状态。
按照目前的情况,您使用的标准部件都不会复制该系列。