Ответ 1
Я немного рассмотрел ваш вопрос, и мне кажется, что Boost.Accumulators уже поддерживает std::vector
. Вот что я могу найти в разделе руководства пользователя:
Другой пример, где число Подсистема операторов полезна когда тип не определяет перегрузки оператора, необходимые для его использования для некоторых статистических расчетов. Например,
std::vector<>
не перегружает никаких арифметических операторов, но может быть полезно использоватьstd::vector<>
как образец или тип переменной. Подкатегория числовых операторов определяет необходимая перегрузка оператора вboost::numeric::operators
пространство имен, которое вводится в объем с помощью Системы Аккумуляторов с используя директиву.
В самом деле, после проверки файл boost/accumulators/numeric/functional/vector.hpp
содержит необходимые операторы для работы "наивного".
Я считаю, вы должны попробовать:
- Включая либо
-
boost/accumulators/numeric/functional/vector.hpp
перед любым другим заголовком аккумуляторов -
boost/accumulators/numeric/functional.hpp
при определенииBOOST_NUMERIC_FUNCTIONAL_STD_VECTOR_SUPPORT
-
- Приведение операторов в область видимости с помощью
using namespace boost::numeric::operators;
.
Осталось только одна последняя деталь: выполнение будет прерываться во время выполнения, потому что начальное накопленное значение построено по умолчанию, и при попытке добавить вектор размера n в пустой вектор произойдет утверждение. Для этого кажется, что вы должны инициализировать аккумулятор с (где n - количество элементов в вашем векторе):
accumulator_set<std::vector<double>, stats<tag::mean> > acc(std::vector<double>(n));
Я попробовал следующий код, mean
дает мне std::vector
размера 2:
int main()
{
accumulator_set<std::vector<double>, stats<tag::mean> > acc(std::vector<double>(2));
const std::vector<double> v1 = boost::assign::list_of(1.)(2.);
const std::vector<double> v2 = boost::assign::list_of(2.)(3.);
const std::vector<double> v3 = boost::assign::list_of(3.)(4.);
acc(v1);
acc(v2);
acc(v3);
const std::vector<double> &meanVector = mean(acc);
}
Я считаю, что это то, что вы хотели?