Здравствуйте, alexeiz, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
CS>>Пока получается как-то так:
CS>>CS>>int vmax_total = sequence.unzip([](const foo& el){return el.vmax}).accumulate(0);
CS>>
CS>>Возможно ли какое-нибудь достойное решение с использованием C++11 ?
A>Что ты хочешь, алгоритм уже записан оптимальным образом. Используя boost::range, unzip можно заменить на "| transformed", но это практически одно и тоже:
A>A>accumulate( sequence | transformed([](foo const & el) { return el.vmax; })
A> , 0);
A>
С точки зрения эстетики та же проблема. Просто вместо unzip используется оператор pipe '|'.
А про "алгоритм уже записан оптимальным образом" ... там неоптимальным образом вообще сложно что-либо написать.
A>С boost::lambda можно получить так:
A>A>accumulate(sequence | transformed(&_1 ->* &foo::vmax), 0)
A>
В принципе лучше (короче) но как бы не менее cryptic, нет?