很多時候,我們需要計算某段代碼的操作所耗費的時間,我們往往會這樣寫:
第一種情況,精確到毫秒。
clock_t start = null, end = null;
double duration = 0;
start = clock();
// operation statements here
end = clock();
duration = (double) (end - start)/CLOCK_PER_SEC;
第二中情況,精確到秒。
time_t start = null, end = null;
int duration = 0;
start = time(NULL);
// operation statements here
end = time(NULL);
duration = end - start;
為了是這些計時的代碼能夠在C++工程中重用,我們可以對其進行封裝。
利用對象的作用域來計算時間。當然這些類只能用在某些特定的場合。
class TimeCost
{
public:
TimeCost(){ m_cur = time(NULL);
~TimeCost()
{
time_t cur = time(NULL);
prinftf("Time cost is %d s\n",cur - m_cur;
}
private:
time_t m_cur;
}
class TimeCost2
{
public:
TimeCost2(){ m_cur = clock();}
~TimeCost2()
{
clock_t cur = clock();
double cost = (double)(cur - m_cur)/CLOCK_PER_SEC;
printf("Time cost: %f s \n", cost);
}
private:
clock_t m_cur;
}
當然,這兩個類的最缺陷就是時間的計算嚴格的依賴于對象的生存期。