Проверьте этот код, печатая строку This is a string!
: LIVE
cpu_time_start = clock();
real_time_start = chrono::high_resolution_clock::now();
for (auto i = 0u; i < strLine.size(); ++i)
cout << strLine[i];
cout << endl;
cpu_time_end = clock();
real_time_end = chrono::high_resolution_clock::now();
cout << "index-based loop CPU time: " << 1000.0 * (cpu_time_end-cpu_time_start) / CLOCKS_PER_SEC << " ms\n"
<< "index-based loop real time: "<< chrono::duration<double, milli>(real_time_end-real_time_start).count() << " ms\n";
//---------------------------------------------------------------------
// get start time, same as above
for (auto i = strLine.begin(); i != strLine.end(); ++i)
cout << *i;
cout << endl;
// get end time and print
//---------------------------------------------------------------------
// get start time, same as above
for (auto &c: strLine)
cout << c;
cout << endl;
// get end time and print
РЕДАКТИРОВАТЬ:
Благодаря @ cigien, он указал на более точный способ сравнительного анализа путем прогрева. Кажется, что они немного похожи друг на друга по производительности с точки зрения времени выполнения, и если вы измените порядок циклов в коде, похоже, что любой из них может быть немного быстрее другого, я думаю, это связано с кэшированием, но все же я не думаю, что компилятор выдаст для них один и тот же код. Вы можете разогреться, просто распечатав строку перед печатью итерацией. И, возможно, более точный способ сравнить их - проверить каждое l oop в одной программе отдельно.
Это вывод при компиляции с g++ -Wall -std=c++17 -O2
.
warming up for tests ...
This is a string!
warmed up for tests ...
This is a string!
index-based loop CPU time: 0.008 ms
index-based loop real time: 0.005986 ms
This is a string!
iterator-based loop CPU time: 0.004 ms
iterator-based loop real time: 0.003417 ms
This is a string!
range-for based loop CPU time: 0.003 ms
range-for based loop real time: 0.002755 ms
Я оставлю эту часть СТАРЫЙ ОТВЕТ , чтобы люди знали, что произошло:
СТАРЫЙ ВЫХОД!
This is a string!
index-based loop CPU time: 0.054 ms
index-based loop real time: 0.054416 ms
This is a string!
iterator-based loop CPU time: 0.005 ms
iterator-based loop real time: 0.004291 ms
This is a string!
range-for based loop CPU time: 0.004 ms
range-for based loop real time: 0.004308 ms
Похоже, что range-for loop
и iterator-based loop
очень близки по производительности с точки зрения времени выполнения и оба выполняются примерно на 10x
быстрее, чем index-based loop
. Попробуйте строки большей длины для получения более точных результатов, запустите его много раз и получите среднее значение.
Вы также можете попробовать скомпилировать его в Compiler Explorer , я не думаю, что тот же код будет генерироваться.