Отображение времени выполнения в 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.
Другие вопросы по тегам