Здравствуйте, 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) одинакова для сколько-нибудь вменяемого оптимизатора. Выводы?
выводы такие, что тут делается "экстросенсорные" предположения о том, что этот код будет использоваться именно в других контейнерах, а не для развитеия самого алгоритма. как правило не контейнер меняется, а развивается сам алгоритм, например мне надо будет не увеличивать на единицу, а применять более сложную формулу, модифицировать только часть массива и т.п. вот это более реально имхо, чем если контейнер с вектора вдруг поменяется на лист. ы?
и что проще, быстрее, надежней будет в этом случае?