C++11 新的計時方法——std::chrono 大法好

計時有很多用途,比如:測試某一段代碼的運行時間,時間越短,則性能相對越高。計時有很多方法,我將首先給出我以前常用的一種計時方法,然後給出我認爲的最佳方法(採用了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秒

  1. 關鍵詞 auto 看上去很高大上,它是一個“自動類型”,可以理解成“萬能類型”,想成爲啥,就成爲啥
  2. system_clock 是 C++11 提供的一個 clock。除此之外,還有兩個clock:steady_clock 和 high_resolution_clock
  3. now( ) 表示計時的那“一瞬間”
  4. duration_cast< > 表示類型轉換
  5. microseconds 表示微妙。除此之外,還有五種時間單位:hours, minutes, seconds, milliseconds, nanoseconds
  6. num 和 den分別表示分子(numerator)和分母(denominator)。在我給出的代碼中,num等於1, den等於1,000,000
  7. count( ) 用來返回時間
  8. 如果想深究,查看 cplusplus

C++11的 #include< chrono >和傳統的 #include < ctime >相比,雖然寫的代碼量多了一點,但是看上去逼格略高,精度也更高~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章