C++程序運行時間測定


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.

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

 

希望對你有用.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM