2016-04-01 3 views
3

boost docs дать это в качестве примера того, как использовать boost::accumulate:Более элегантное усиление накопления в C++ 11?

// The data for which we wish to calculate statistical properties: 
std::vector<double> data(/* stuff */); 

// The accumulator set which will calculate the properties for us: 
accumulator_set< double, features< tag::tail<left> > > acc(
    tag::tail<left>::cache_size = 4); 

// Use std::for_each to accumulate the statistical properties: 
std::for_each(data.begin(), data.end(), bind<void>(ref(acc), _1)); 

Есть ли более элегантный способ, чтобы написать этот код с петлями диапазона на основе или лямбды в C++ 11/14?

+1

Что это код должен делать? –

+0

Отслеживайте наименьшие 4 значения. Хвост описан по адресу http://www.boost.org/doc/libs/1_60_0/doc/html/accumulators/user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail. Мой вопрос в основном касается структуры накопителей, а для строки for_each хотя –

ответ

4

Есть два метода, которые я могу думать о том, как следует:

std::vector<double> data = {2.1, 2.2, 3.3, 4.4, 5.5}; 
accumulator_set< double, features< tag::tail<left> > > acc(tag::tail<left>::cache_size = 4); 

for_each(data.begin(), data.end(), [&acc](double y){ acc(y); }); 

или

std::vector<double> data = {2.1, 2.2, 3.3, 4.4, 5.5}; 
accumulator_set< double, features< tag::tail<left> > > acc(tag::tail<left>::cache_size = 4); 

for (auto y : data) 
    acc(y); 
0
std::vector<double> data = {2.1, 2.2, 3.3, 4.4, 5.5}; 
std::set<double> least; 
for (auto&& x:data) { 
    least.insert(decltype(x)(x)); 
    if (least.size() > 4) 
    least.erase(std::prev(least.end())); 
} 

с точки зрения персонажей, в основном такой же размер. И поскольку он использует хорошо известные примитивы std, их намного легче читать и понимать.

+0

было бы очень интересно увидеть различия. Я думаю, что он будет делать разные вещи при разных затратах времени исполнения. – sehe

+0

Это обрабатывает хвост, но, как я уже упоминал в комментариях, меня больше интересует инфраструктура аккумуляторов. Фрагмент кода был всего лишь одним конкретным примером, извлеченным из документов –

Смежные вопросы