【转载】boost中的timer们

来源:互联网 发布:澳洲阳光海岸大学 知乎 编辑:程序博客网 时间:2024/06/07 01:06
    当需要测试语句执行时间时,用惯了c中的clock_t结构体和clock()函数后,感受一下C++的纯正吧。

/*
编译使用g++ timer.cpp -o timer
*/
#include <boost/timer.hpp>
#include <iostream>

using namespace std;

using namespace boost;

int main()
{
     long k;
     timer t;//此时开始计时
     for (long i = 0; i<100000000 ;i++)
     {
         k += i;
     }
     cout << t.elapsed() << "\n";//截止到此使用的时间

     cout << "最大时间: " << t.elapsed_max() << "\n";

     cout << "最小时间: " << t.elapsed_min() << "\n";
}

【转载】boost中的timer们 - asb2010 - C++追梦之路


其实boost库中的这个timer类只是对那些结构体和函数的一层包装,头文件如下(只列实现部分):

class timer
{

private:
          std::clock_t _start_time;//这个熟悉吧^-^

public:
          timer() // 初始化_start_time
         { _start_time = std::clock(); }
          void    restart() //重新开始计时
         { _start_time = std::clock(); }
         double elapsed() const //返回经过的时间,单位“秒”
         { return double(std::clock() - _start_time) / CLOCKS_PER_SEC; }

         double elapsed_max() const    //返回经历时间的最大值,这个值在一些系统上可能很大!!
        {
            return (double((std::numeric_limits<std::clock_t>::max)())
            - double(_start_time)) / double(CLOCKS_PER_SEC);
        }

    double elapsed_min() const //返回经历时间的最小值
        { return double(1)/double(CLOCKS_PER_SEC); }

};


另外提供一个类progress_timer,它在离开定义自己的作用范围之后就会自动销毁, 并且显示经过的时间。
/*
*/
#include <boost/progress.hpp>
#include <iostream>

int main()
{
     long k;
     boost::progress_timer pt;
     for (long i = 0; i<10000000 ;++i)
     {
         k += i;
     }
     return 0;
}

【转载】boost中的timer们 - asb2010 - C++追梦之路

此外还有一个比较有意思的类progress_display,它显示一个进度条:-^。

#include <boost/progress.hpp>
#include <iostream>

int main()
{
     long k;
     boost::progress_display pd(100);
     for (int i = 0; i<100 ; ++i)
     {
         for(long l = 0, k = 0;
                    l<10000000;
                    ++l)
         {
             k += l;
         }
         ++pd;
     }
     return 0;
}
【转载】boost中的timer们 - asb2010 - C++追梦之路

后两个源码实现都不是太复杂,不再列出。

C++给人以简明快捷的代码,令人耳目一新。


0 0