BOOST_NUMERIC_FUNCTIONAL_STD_VECTOR_SUPPORTをdefineしておくと、std::vector用の演算子が定義され、accumulators_setの要素にstd::vectorを指定することができるようになります。
#define BOOST_NUMERIC_FUNCTIONAL_STD_VECTOR_SUPPORT #include <iostream> #include <vector> #include <boost/assign/list_of.hpp> #include <boost/accumulators/accumulators.hpp> #include <boost/accumulators/statistics.hpp> #include <boost/range/algorithm/for_each.hpp> void disp(double x) { std::cout << x << ' '; } int main() { using namespace boost::accumulators; accumulator_set<std::vector<double>, stats<tag::min, tag::mean, tag::sum> > acc(std::vector<double>(2)); // vectorの要素数 const std::vector<double> v1 = boost::assign::list_of(1.0)(2.0); const std::vector<double> v2 = boost::assign::list_of(2.0)(3.0); const std::vector<double> v3 = boost::assign::list_of(3.0)(4.0); acc(v1); acc(v2); acc(v3); const std::vector<double>& min_vec = extract::min(acc); // 最小値 const std::vector<double>& mean_vec = extract::mean(acc); // 平均値 const std::vector<double>& sum_vec = extract::sum(acc); // 合計値 boost::for_each(min_vec, disp); std::cout << std::endl; boost::for_each(mean_vec, disp); std::cout << std::endl; boost::for_each(sum_vec, disp); std::cout << std::endl; }
1 2 2 3 6 9
std::vectorのほかに、std::complexとstd::valarrayも対応されています。
それぞれ、BOOST_NUMERIC_FUNCTIONAL_STD_COMPLEX_SUPPORT、BOOST_NUMERIC_FUNCTIONAL_STD_VALARRAY_SUPPORTをdefineすることで利用可能になります。