From:http://www.cnblogs.com/killerlegend/p/3877703.html
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.
你當然可以多測試幾次,取一個平均值.
希望對你有用.