Как использовать Chrono для определения времени выполнения

0

Я хочу определить, какой контейнер лучше использовать для определенных операций, поэтому я должен проверить время выполнения вектора по сравнению с списком.

Ссылки в Интернете были довольно неопределенными или слишком сложными для этой реализации.

Любая помощь будет оценена

  • 1
    Вы имеете в виду «Как измерить время выполнения» или «Как измерить время, необходимое для компиляции»? Как правило, я использую команду типа time myprog или time g++ {options} myprog.cpp для измерения времени, но это предполагает, что это достаточно длительное время выполнения - не менее секунды или двух.
  • 0
    Я не думаю, что вам интересно время компиляции , но время выполнения ? И вообще, вы делаете снимок времени, прежде чем выполнять операцию, и еще один снимок, когда операция завершена, затем вы просто проверяете разницу между двумя моментами.
Показать ещё 1 комментарий
Теги:
list
vector
compiler-optimization
chrono

3 ответа

0

Вот как я его использую:

#include <iostream>
#include <chrono>

    auto start = std::chrono::high_resolution_clock::now();
    ... code to measure here ... 
    auto diff = std::chrono::high_resolution_clock::now() - start;
    auto t1 = std::chrono::duration_cast<std::chrono::nanoseconds>(diff);
    std::cout << "Loop1: " << t1.count() << std::endl;

Вам нужно будет скомпилировать это с помощью g++ -std=c++11, и пока у вас есть рабочий компилятор и библиотека С++ 11, это должно сработать.

  • 0
    steady_clock этого я бы использовал steady_clock , high_resolution_clock может измениться, если изменить системное время во время выполнения, хотя, вероятно, этого никогда не произойдет ...
  • 0
    Не то, что я (или моя система) делает очень часто ... Я ожидаю, что часы с высоким разрешением, по крайней мере, в некоторых системах, дают более высокое разрешение, и, по крайней мере, в некоторых случаях, это более важно. Но я признаю, что только что скопировал это из некоторого кода, который у меня был, не задумываясь о том, какие могут быть различные источники тактовых импульсов, и об их преимуществах / недостатках.
Показать ещё 3 комментария
0

Это мой текущий код:

#include <iostream>
#include <list>
#include <vector>
#include <chrono>
#include <stdlib.h>
#include <ctime>

using namespace std;

template <typename Container>
void fill_container(Container& c, int n)
{
int v;

for(int i =0; i<n; i++)
{
    v= rand() %12;
    c.push_back(v);
}

}

template<typename Container>
void print(Container& c, ostream& out =cout)
{
typename Container::iterator itr = c.begin();
cout << "now" ;
while(itr!=c.end())
{
    out << *itr << endl;
    itr++;
}

}

template <typename Container>
void removeOdd(Container& c)
{
 typename Container::iterator itr2 = c.begin();
 while(itr2!= c.end())
 {
        cout << *itr2 << endl;
         if(*itr2 %2 != 0 )
        {
            itr2 = c.erase(itr2);
        }
        itr2++;
 }

 }

int main()
{





//Timer ends
std::chrono::steady_clock::time_point _start(std::chrono::steady_clock::now());
// code you want to time here
vector<int> damn;
fill_container(damn, 20);
removeOdd(damn);
print(damn);
std::chrono::steady_clock::time_point _end(std::chrono::steady_clock::now());

std:: cout << std::chrono::duration_cast<std::chrono::duration<double>>( _end - _start).count();



return 0;
}
  • 0
    Ваш код работает (за исключением опечатки в первом, что я редактировал), просто убедитесь, что вы компилируете с -std=c++11
  • 0
    Как именно я это делаю? И спасибо за помощь
Показать ещё 3 комментария
0

Если у вас есть доступ к компилятору C++11,

#include <chrono>
#include <iostream>

int main()
{
    std::chrono::steady_clock::time_point _start(std::chrono::steady_clock::now());
    // code you want to time here
    std::chrono::steady_clock::time_point _end(std::chrono::steady_clock::now());

    std::cout << std::chrono::duration_cast<std::chrono::duration<double>>(
                    _end - _start).count(); // in seconds, read more about std::chrono
}
  • 0
    Я пробовал это, но получил кучу ошибок. У меня есть заголовочный файл <chrono>, но он постоянно говорит мне: 'std :: chrono' не был объявлен |
  • 2
    компилировать с -std=c++11 , <chrono> является частью стандарта C ++ 11

Ещё вопросы

Сообщество Overcoder
Наверх
Меню