Re[8]: update sequence items
От: Аноним  
Дата: 06.09.06 11:42
Оценка: +1
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Аноним, Вы писали:


А>>на самом деле я бы написал тут вообще вот так. и это имхо было _правильно_ в данном случае:


А>>
А>>    for( int i = 0; i < iv.size(); i++ ) 
А>>        ++iv[i];
А>>


А>>все предельно просто и понятно. и компильнется быстрее.


RO>Правильно тут использовать не int, а std::size_t. И то не очень. Код с for(C::iterator) будет работать для любого контейнера, даже для iterator_range<istream_iterator>, — после соответствующей замены типа итератора. Код с transform (как и foreach, кстати), может быть использован для любого контейнера без единой замены. Код же с индексом годится только для vector/deque, причем для второго падает эффективность. Читаемость всех 4 вариантов одинакова для сколько-нибудь опытного программера, эффективность (пока у нас всё еще std::vector) одинакова для сколько-нибудь вменяемого оптимизатора. Выводы?


выводы такие, что тут делается "экстросенсорные" предположения о том, что этот код будет использоваться именно в других контейнерах, а не для развитеия самого алгоритма. как правило не контейнер меняется, а развивается сам алгоритм, например мне надо будет не увеличивать на единицу, а применять более сложную формулу, модифицировать только часть массива и т.п. вот это более реально имхо, чем если контейнер с вектора вдруг поменяется на лист. ы? и что проще, быстрее, надежней будет в этом случае?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.