計時有很多用途,比如:測試某一段代碼的運行時間,時間越短,則性能相對越高。計時有很多方法,我將首先給出我以前常用的一種計時方法,然後給出我認爲的最佳方法(採用了C++11的標準技術)。
首先給出我以前常用的一種“傳統”的計時方法:
#include <ctime>
using namespace std;
clock_t start = clock();
// do something...
clock_t end = clock();
cout << "花費了" << (double)(end - start) / CLOCKS_PER_SEC << "秒" << endl;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
此方法可以精確到毫秒,輸出樣例:花費了0.123秒
c++11裏面提供了很多炫酷的新標準。我以下給出採用 C++11 標準的”最佳計時方法“的代碼:
#include <chrono>
using namespace std;
using namespace chrono;
auto start = system_clock::now();
// do something...
auto end = system_clock::now();
auto duration = duration_cast<microseconds>(end - start);
cout << "花費了"
<< double(duration.count()) * microseconds::period::num / microseconds::period::den
<< "秒" << endl;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
此方法可以精確到微妙,輸出樣例:花費了0.123456秒
- 關鍵詞 auto 看上去很高大上,它是一個“自動類型”,可以理解成“萬能類型”,想成爲啥,就成爲啥
- system_clock 是 C++11 提供的一個 clock。除此之外,還有兩個clock:steady_clock 和 high_resolution_clock
- now( ) 表示計時的那“一瞬間”
- duration_cast< > 表示類型轉換
- microseconds 表示微妙。除此之外,還有五種時間單位:hours, minutes, seconds, milliseconds, nanoseconds
- num 和 den分別表示分子(numerator)和分母(denominator)。在我給出的代碼中,num等於1, den等於1,000,000
- count( ) 用來返回時間
- 如果想深究,查看 cplusplus
C++11的 #include< chrono >和傳統的 #include < ctime >相比,雖然寫的代碼量多了一點,但是看上去逼格略高,精度也更高~