chrono时间库是c++ 11中的新特性,提供计时,时钟等功能。
在平时学习测试的时候会记录程序运行时间,比较两个或多个算法的优劣,通常会用chrono。
参考网站:
cppreference.com
cplusplus.com
1.duration
#include<iostream>
#include<chrono>
using namespace std;
using namespace chrono;
void test()
{
int a = 0;
int i = 0;
while(i<100000000)
{
a++;
i++;
}
}
int main()
{
auto t1 = steady_clock::now();
test();
auto t2 = steady_clock::now();
auto time_span = duration_cast<duration<double>>(t2 - t1);
auto ms = duration_cast<milliseconds>(t2 - t1); // or, change 't2 - t1' to 'time_span'
cout << "Test steady_clock: " << endl;
cout << "This function took " << time_span.count() << " seconds." << endl;
cout << "This function took " << ms.count() << " milliseconds." << endl;
return 0;
}
Test steady_clock:
This function took 0.0361612 seconds.
This function took 36 milliseconds.
其中关于duration模板类:
template <class Rep, class Period = ratio<1> >class duration;
第一个参数是类型,决定后面的用count()打印输出;第二个参数是以秒为单位的比率(ratio),理解为1s的多少分之一,默认不写是秒。
封装好的常用类:
member type | Period |
---|---|
hours | ratio<3600,1> |
minutes | ratio<60,1> |
seconds | ratio<1,1> |
milliseconds | ratio<1,1000> |
microseconds | ratio<1,1000000> |
nanoseconds | ratio<1,1000000000> |
duration.count()采用的不是四舍五入,是截断。
#include<iostream>
#include<chrono>
using namespace std;
int main()
{
chrono::seconds s (1); // 1 second
chrono::milliseconds ms = chrono::duration_cast<chrono::milliseconds> (s);
ms += chrono::milliseconds(2999); // 2999 millisecond
s = chrono::duration_cast<chrono::seconds> (ms); // truncated
cout << "ms: " << ms.count() << endl;
cout << "s: " << s.count() << endl;
return 0;
}
ms: 3999
s: 3