Увеличьте использование памяти аккумулятора и эффективность

Я использую аккумуляторы повышения, чтобы получить статистику от вектора двойников в C ++.
Каждый раз, когда мне нужна новая статистика, я вызываю пользовательский метод, который получает ее, создавая аккумулятор, загружая его векторными значениями и, наконец, используя функцию статистики повышения, например.

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’, который бы получал их все сразу, но мне интересно, если бы при создании и загрузке аккумулятора использовалось как минимум столько же памяти, сколько у исходного вектора при каждом его создании.

Спасибо, парни

Пит

1

Решение

Используемый вами алгоритм работает на samples коллекция, которая является атрибутом класса Entity, Коллекция является экземпляром векторного шаблона.

std::for_each экземпляр работает только на итераторах коллекции, которые передаются во время построения: samples.begin() а также samples.end(),

Стандартные итераторы специально разработаны для абстрагирования понятия курсора или указателя на коллекцию. Они никоим образом не дублируют коллекцию, поэтому вам не следует беспокоиться о проблеме выделения памяти при их использовании.

Конкретные accumulator_set используемый здесь также не производит никакой копии коллекции. Он просто обращается к итератору, выполняет сравнение между текущим минимальным кандидатом и текущим указанным значением коллекции и сохраняет лучшее из обоих для следующей итерации.

В настоящее время ни одна из стандартных частей, которые вы используете, не дублирует коллекцию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]