如何获得代码运行时间?

   

在ACM中经常会需要测试一个算法的效, 这就需要测试我们的代码运行的时间。

problem: 那么如何测试代码的运行时间呢?

  ①、在windows中我们可以直接调用 <time.h>

    我们可以定义clock_t  类型的时间变量,clock()函数的返回值的单位是ms(毫秒);

    用法如下:在开头定义一个:

 int  main()

{

clock_t   start = clock();

      ......................................

      ............................................

clock_t  finish clock();

     printf("%.6f\n",(double)(finish-start)/ CLOCKS_PER_SEC);

}

       这里我们遇到一个常量CLOCKS_PER_SEC,我们可以用cout 打印输出看看,其值大小为1000;

      我们就知道 除以CLOCKS_PER_SEC的作用是将时间转化为单位为:s(秒second);




②、同时兼容 win linux 的写法

采用下一种写法更适合ACMer的写法:

#ifndef _RECORDTIME_H
#define _RECORDTIME_H


#if ((defined _WIN32) || (defined _WIN64))
#include <time.h>
class RecordTime
{
// return 返回时间花费的毫秒值
public:
    RecordTime():startTime(0){
    }
    void start()
    {
       startTime = clock();
    }
    double stop()
    {
       double MilliSecond = (double)(clock() - startTime);
       return (MilliSecond>1.e-10)?MilliSecond : 0 ;
    }
    ~RecordTime(){}
private:
    clock_t startTime;
};
#else
#include<sys/time.h>
class RecordTime
{
public:
    RecordTime(){ }
    void start()
    {
       gettimeofday(&startTime,NULL);
    }
    double stop()
    {
        gettimeofday(&endTime,NULL);
        double MilliSecond = ((double)1000.0)*(endTime.tv_sec - startTime.tv_sec) + (endTime.tv_usec - startTime.tv_usec)/1000.0;
        return (MilliSecond>1.e-10)?MilliSecond : 0 ;
    }
    ~RecordTime(){}
private:


private:
    struct timeval startTime;
    struct timeval endTime;
};
#endif // _WIN32


#endif // _RECORDTIME_H


/** usage:
    RecordTime times;
    times.start();
    //do something
    double timeCostMs = times.stop();
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值