轉自:http://www.cnitblog.com/mantou/archive/2005/08/24/2304.html
一個程序的功能通常有很多種方法來實現,怎么樣的程序才算得上最優呢?舉個例子,如果實現同一個功能的兩個程序,一個一點按鈕就給出運行結果,而另一個則需要漫長的時間去等待,就像安裝WINDOWS XP一樣(呵呵,太誇張了吧),你會去使用哪個程序呢?毋庸置疑,最優程序的第一條法則就是:程序的運行速度要快。
那么,既然一個程序能用多種方法來實現,我又如何知道哪種方法是最優的呢?有些程序是顯而易見的,你把它運行一下,一個程序要3秒,一個要1秒,你當然能感覺出來。如果都在一秒之內呢,你又可以看申請的內存空間的多少,運算的數據大小,運算過程的簡單復雜,有時也能分辨出哪個程序最好,可是有的時候,卻不是那么容易看出來,比如它比另一個程序少定義一個變量,可是它又比那另一個程序多用幾個除法,那么你就如何比較它們的運行速度呢?辦法只有一個——計時!
C++中的計時函數是clock(),而與其相關的數據類型是clock_t(頭文件是time.h)。函數定義原型為:clock_t clock(void);
這個函數返回從“開啟這個程序進程”到“程序中調用clock()函數”時之間的CPU時鍾計時單元(clock tick)數,在MSDN中稱之為掛鍾時間(wal-clock)。
其中clock_t是用來保存時間的數據類型,在time.h文件中,我們可以找到對它的定義:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
很明顯,clock_t是一個長整形數。另外在time.h文件中,還定義了一個常量CLOCKS_PER_SEC,它用來表示一秒鍾會有多少個時鍾計時單元,因此,我們就可以使用公式clock()/CLOCKS_PER_SEC來計算一個進程自身的運行時間。
下面就上面的知識給大家舉個例子幫助大家理解。
#include<iostream.h>
#include<time.h>
void main()
{
clock_t start,finish;
double totaltime;
start=clock();
…… //把你的程序代碼插入到這里面
finish=clock();
totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
cout<<"\n此程序的運行時間為"<<totaltime<<"秒!"<<endl;
}
如此這般,我們就可以得出程序的運行時間然后進行比較,很簡單,很方便吧。
可能有人要問,如果兩個程序的運行時間都少於一秒,我們根本就感覺不到,有比較的意義么?回答是有!因為我們寫的可能只是一個很大的程序中的一個功能函數,而在主程序中可能會反復調用這個功能函數,如果一個功能函數比另一個實現同樣一個功能函數運行快0.01秒,把這兩個函數在主函數中分別調用1000次,效果是顯而易見的。
好了,這是我的一些小經驗,希望能給我的LP和其他的朋友們提供一點小小的幫助