По соображениям эффективности я всегда избегаю писать такие петли, как это:
for(std::size_t i = 0; i < vec.size(); ++i) { ... }
где vec
- контейнер STL. Вместо этого я либо делаю
const std::size_t vec_size = vec.size();
for(std::size_t i = 0; i < vec_size; ++i) { ... }
или используйте итераторы контейнера.
Но насколько плохо первое решение на самом деле? Я помню, как читал в Мейерсе, что он будет квадратичным, а не линейным, потому что вектор не знает его размер и многократно должен рассчитывать. Но разве современные компиляторы не обнаружат это и не оптимизируют его?