Я новичок в библиотеке Boost. Я хочу, чтобы программа, которая может вычислить мин, макс, среднее и дисперсия вектора расстояния (типа std::vector <double>
), и я написал следующий кодboost accumulator_set: ожидать первичного выражения
std::vector <double> dist_err;
// ... do something with dist_err
boost::accumulators::accumulator_set
<
double,
boost::accumulators::stats
<
boost::accumulators::tag::min ,
boost::accumulators::tag::max ,
boost::accumulators::tag::mean,
boost::accumulators::tag::variance
>
> stat_acc;
std::for_each(dist_err.begin(), dist_err.end(), boost::bind <void> (boost::ref(stat_acc), boost::mpl::placeholders::_1));
std::cout << "min[distance error]: " << boost::accumulators::min (stat_acc) << std::endl;
std::cout << "MAX[distance error]: " << boost::accumulators::max (stat_acc) << std::endl;
std::cout << " E[distance error]: " << boost::accumulators::mean (stat_acc) << std::endl;
std::cout << "VAR[distance error]: " << boost::accumulators::variance (stat_acc) << std::endl;
Но программа дает мне сообщение об ошибке в строке std::for_each(dist_err.begin(), dist_err.end(), boost::bind <void> (boost::ref(stat_acc), boost::mpl::placeholders::_1));
и говорит
error: expected primary-expression before ')' token
std::for_each(dist_err.begin(), dist_err.end(), boost::bind <void> (boost::ref(stat_acc), boost::mpl::placeholders::_1));
Может кто-нибудь, пожалуйста, дайте мне некоторый намек на то, как решить эту ошибку?
Привет, Джон, он работает! Большое спасибо за ваш ответ. Но я все еще немного смущен ... не могли бы вы попытаться объяснить, откуда этот «_1», и что это значит? –
@BojianZheng: '_1' происходит от Boost, хотя и не в пространстве имен' boost :: '. Он также является частью стандарта C++ 11, который имеет 'std :: bind()'. Если вы хотите знать, что это значит, просто прочитайте документацию. –