C++程式執行時間測定
Author:KillerLegend
Date:2014.7.30
此處程式的測試時間精確到毫秒級別,第一種方式是在程式中測定,第二種是編寫一個專門用於測試程式執行時間的命令列程式.下面分別介紹:
程式中測定
主要用到的標頭檔案有time.h,主要使用的是其中的一個clock函式,例程如下:
1 #include <iostream> 2 3 #include <time.h> 4 5 usingnamespace std; 6 7 int main() 8 9 { 10 11 clock_t start = clock();12 13 // Place your codes here... 14 15 clock_t ends = clock(); 16 17 cout <<"Running Time : "<<(double)(ends - start)/ CLOCKS_PER_SEC << endl; 18 19 return0; 20 21 }
程式很簡單,輸出的結果秒數,如果將結果乘以1000則輸出的為毫秒數.
命令列程式測定
首先說一下命令列引數,完整的main函式宣告如下:
1 int main (intargc,char*argv[])
其中第一個引數argc代表argument count,也就是引數的個數,應用程式本身也算一個引數,第二個引數argv表示一系列字串,分別對應於第一個,第二個...引數.第一個引數argv[0]是程式本身的名字,argv[argc]是一個空指標.現在我們就可以自己編寫一個簡單的計時器程式了,程式如下,名字就叫做timer.cpp:
1 #include <iostream> 2 3 #include <stdlib.h> 4 5 #include <time.h> 6 7 89 usingnamespace std; 10 11 int main(int argc,char** argv)//char** argv<==>char* agrv[] 12 13 { 14 15 if(argc!=2) 16 17 { 18 19 cout<<"Usage:timer program_examed_name"<<endl; 20 21 return1; 22 23 } 24 25 26 27 cout<<"Beginning test..."<<endl; 28 29 clock_t begin = clock(); 30 31 system(argv[1]); 32 33 clock_t end = clock(); 34 35 36 37 cout<<"Running time: "<<(double)(end-begin)/CLOCKS_PER_SEC*1000<<"ms"<<endl; 38 39 }
其中的if語句用於判斷引數的個數,如果不對,則中斷程式.用到的system包含於stdlib.h標頭檔案橫縱,因此不要忘記包含這個檔案.此命令用於執行我們編譯好的程式.下面來具體說一下步驟:
1:首先將timer.cpp編譯,生成一個timer.exe可執行程式.
2:我們的程式,假設為main.cpp,如果我們要從外界讀取資料並且輸出資料,我們需要使用freopen函式(包含在stdio.h中)來讓程式執行的時候自動讀取輸出,看起來就像這樣子:
1 #include <cstdio> 2 3 //...other headers 4 5 int main() 6 7 { 8 9 freopen("data.in","r",stdin); 10 11 freopen("data.out","w",stdout); 12 13 //your code... 14 15 return0; 16 17 }
其中,data.in和data.out自己隨便起名都可以,保證和原程式在同一個目錄下就行.
編譯程式完成後, 生成一個main.exe程式,然後將所需要的資料放到data.in中,開啟命令列,轉到我們的程式所在的位置(包含有main.exe以及timer.exe),然後在命令列中輸入:
1 timer main
看起來就像下面這樣:
時間是74ms.
你當然可以多測試幾次,取一個平均值.
希望對你有用.