c++ - Заполнить вектор с помощью итераторов с возрастающими значениями и измерить время


1

Код:

start = clock();
for (int i = 0; first != last; ++i)
{
    *first = i;
    first++;
}
finish = clock();
res = finish - start;
cout << "Цикл с итераторами:" << res << "ms" << endl;

Код вроде нормальный (не уверен в этом). Но алгоритм выполняется за 0 мс. Как это исправить? Размер вектора = 100000000;

Источник
  •  104
  •  1
  • 22 янв 2018 2018-01-22 06:02:32
если вектор просто заполняется, но потом не используется, компилятор может совсем выбросить его заполнение. И будет 0 мс — 22 янв 20182018-01-22 07:15:57.000000
Кстати, чтобы корректно перевести из процессорного времени в мс надо res поделить на CLOCKS_PER_SEC а потом умножить на 1000 — 22 янв 20182018-01-22 05:58:53.000000
Ну а какая длина этого вектора? Если небольшая, то может и правда 0 в миллисек? — 22 янв 20182018-01-22 05:56:29.000000

1 ответ

2

Во-первых, можно повторить эти же действия в цикле несколько сотен/тысяч раз.

И заодно воспользоваться не тормознутым clock(), а high_resolution_clock.

И еще - Гантерот вам в помощь, у него этот вопрос рассмотрен более-менее подробно.

  • 22 янв 2018 2018-01-22 06:11:27