Я хочу определить, какой контейнер лучше использовать для определенных операций, поэтому я должен проверить время выполнения вектора по сравнению с списком.
Ссылки в Интернете были довольно неопределенными или слишком сложными для этой реализации.
Любая помощь будет оценена
Вот как я его использую:
#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, это должно сработать.
steady_clock
этого я бы использовал steady_clock
, high_resolution_clock
может измениться, если изменить системное время во время выполнения, хотя, вероятно, этого никогда не произойдет ...
Это мой текущий код:
#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;
}
-std=c++11
Если у вас есть доступ к компилятору 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
}
-std=c++11
, <chrono> является частью стандарта C ++ 11
time myprog
илиtime g++ {options} myprog.cpp
для измерения времени, но это предполагает, что это достаточно длительное время выполнения - не менее секунды или двух.