Отображение времени выполнения в C++: cin/scanf/getchar_unlocked()
Я работаю над проектом, чтобы показать, что std::cin
медленнее принимать входные данные по сравнению с scanf
что, в свою очередь, будет медленнее, чем принимать ввод через самописанные функции, используя getchar/getchar_unlocked()
и так далее.
Я хочу записывать и распечатывать время выполнения в каждом случае, но я не знаю, как применять файлы заголовков времени, хронографа и т. Д.
Я буду читать большую часть входных значений из стандартного ввода и хочу отображать время выполнения в каждом случае.
Пожалуйста, скажите мне, как справиться со временем в этом коротком примере.
2 ответа
Как насчет чего-то вроде
auto start = std::chrono::high_resolution_clock::now();
some_long_running_operation();
auto end = std::chrono::high_resolution_clock::now();
std::cout << "Operation took " <<
std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() <<
" microseconds\n";
(Более или менее взято дословно из этой ссылки и ее подстраниц. Более конкретно из второго примера для std::chrono::time_point
ссылка, просто поменял используемые часы.)
Код использует текущее время из часов с высоким разрешением в качестве времени начала, выполняет операцию, которая должна быть временем, а затем получает время окончания. Затем он отображает разницу в микросекундах.
#include <time.h>
clock_t t;
void startTimer() {
t = clock();
}
void stopTimer() {
t = clock() - t;
printf("It took me %d clicks (%f seconds).\n", t, ((float)t) / CLOCKS_PER_SEC);
}
А затем вызовите эти два метода, как вы хотите.
ИЛИ ЖЕ
#include <sys/time.h>
#include <iostream>
using namespace std;
struct timeval t1, t2;
struct timezone tz;
void startTimer()
{
gettimeofday(&t1, &tz);
}
void stopTimer()
{
gettimeofday(&t2, &tz);
cout<<"It took "<< t2.tv_sec - t1.tv_sec <<" seconds and "<< t2.tv_usec - t1.tv_usec<<" microseconds"<<endl;;
}
// call "startTimer()" to start timer
// call "stopTimer()" to stop timer and print total time in microseconds.