C++11 新的计时方法——std::chrono 大法好
計(jì)時(shí)有很多用途,比如:測(cè)試某一段代碼的運(yùn)行時(shí)間,時(shí)間越短,則性能相對(duì)越高。計(jì)時(shí)有很多方法,我將首先給出我以前常用的一種計(jì)時(shí)方法,然后給出我認(rèn)為的最佳方法(采用了C++11的標(biāo)準(zhǔn)技術(shù))。
首先給出我以前常用的一種“傳統(tǒng)”的計(jì)時(shí)方法:
#include <ctime>int main() {clock_t start = clock();//for (auto i = 0; i < 1000000; i++);clock_t end = clock();cout << "花費(fèi)了" << (double)(end - start) / CLOCKS_PER_SEC << "秒" << endl;sleep(10); }此方法可以精確到毫秒,輸出樣例:花費(fèi)了0.01秒(不除以CLOCKS_PER_SEC可以看到后面4位都是0)
C++11里面提供了很多炫酷的新標(biāo)準(zhǔn)。我以下給出采用 C++11 標(biāo)準(zhǔn)的”最佳計(jì)時(shí)方法“的代碼:
#include <chrono> using namespace chrono;int main() {auto start = system_clock::now(); // 精度到nanosecondsfor (auto i = 0; i < 1000000; i++);auto end = system_clock::now();auto duration = duration_cast<microseconds>(end - start); // 換成nanoseconds,發(fā)現(xiàn)和第三個(gè)例子相當(dāng)cout << "花費(fèi)了" << double(duration.count()) << "微秒" << endl;sleep(10); }此方法可以精確到微秒,輸出樣例:花費(fèi)了7366微秒
關(guān)鍵詞 auto 看上去很高大上,它是一個(gè)“自動(dòng)類(lèi)型”,可以理解成“萬(wàn)能類(lèi)型”,想成為啥,就成為啥
再來(lái)看一下high_resolution_clock:
#include <chrono> using namespace chrono;int main() {auto start = std::chrono::high_resolution_clock::now();for (auto i = 0; i < 1000000; i++);auto end = std::chrono::high_resolution_clock::now();auto duration = duration_cast<nanoseconds>(end - start);cout << "花費(fèi)了" << double(duration.count()) << "納秒" << endl;sleep(10); }此方法可以精確到納秒,輸出樣例:花費(fèi)了7.35768e+06納秒
system_clock 是 C++11 提供的一個(gè) clock。除此之外,還有兩個(gè)clock:steady_clock 和 high_resolution_clock(到納秒)
now( ) 表示計(jì)時(shí)的那“一瞬間”
duration_cast< > 表示類(lèi)型轉(zhuǎn)換
microseconds 表示微妙。除此之外,還有五種時(shí)間單位:hours, minutes, seconds, milliseconds, nanoseconds
num 和 den分別表示分子(numerator)和分母(denominator)。在我給出的代碼中,num等于1, den等于1,000,000
count( ) 用來(lái)返回時(shí)間
如果想深究,查看 cplusplus
C++11的 #include< chrono >和傳統(tǒng)的 #include < ctime >相比,雖然寫(xiě)的代碼量多了一點(diǎn),但是看上去逼格略高,精度也更高~
如何獲取當(dāng)前時(shí)間可以參考:https://blog.csdn.net/linfengmove/article/details/104562569
總結(jié)
以上是生活随笔為你收集整理的C++11 新的计时方法——std::chrono 大法好的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 智能指针weak_ptr
- 下一篇: C++11库中 steady_clock