Re[2]: ranges, unzip
От: c-smile Канада http://terrainformatica.com
Дата: 19.09.11 04:42
Оценка:
Здравствуйте, 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, нет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.