По совпадению я недавно сделал тест скорости (заполняя 10 *1024* 1024 дюйма rand ()).
Это 3 прогона, время в нано-секундах
vect[i] time : 373611869
vec.at(i) time : 473297793
*it = time : 446818590
arr[i] time : 390357294
*ptr time : 356895778
ОБНОВЛЕНИЕ: добавлен stl-алгоритм std :: generate, который, кажется, работает быстрее всего из-за специальной итераторной оптимизации (VC ++ 2008). время в микросекундах.
vect[i] time : 393951
vec.at(i) time : 551387
*it = time : 596080
generate = time : 346591
arr[i] time : 375432
*ptr time : 334612
Вывод: используйте стандартные алгоритмы, они могут быть быстрее, чем явный цикл! (а также хорошая практика)
Обновление: вышеупомянутые времена были в ситуации, связанной с вводом / выводом, я делал те же тесты с привязкой к процессору (перебирал относительно короткий вектор, который должен постоянно помещаться в кэш, умножил каждый элемент на 2 и записал вернуться к вектору)
//Visual Studio 2008 Express Edition
vect[i] time : 1356811
vec.at(i) time : 7760148
*it = time : 4913112
for_each = time : 455713
arr[i] time : 446280
*ptr time : 429595
//GCC
vect[i] time : 431039
vec.at(i) time : 2421283
*it = time : 381400
for_each = time : 380972
arr[i] time : 363563
*ptr time : 365971
Интересно, что итераторы и оператор [] значительно медленнее в VC ++ по сравнению с for_each (который, по-видимому, ухудшает итераторы до указателей посредством некоторой магии шаблонов для повышения производительности).
В GCC время доступа только для at (), что нормально, потому что это единственная проверенная диапазон функция тестов.