1. 程式人生 > >C++程式執行時間測定

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 (int
argc,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  
 8
9 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.

你當然可以多測試幾次,取一個平均值.

希望對你有用.