使用Boost中的Timer库计算程序的运行时间

程序开发人员都会面临一个共同的问题,即写出高质量的代码完毕特定的功能。评价代码质量的一个重要标准就是算法的运行效率,也就是算法的运行时间。为了可靠的提高程序的运行效率,首先要知道运行程序所消耗的时间,然后找出可行的方案对程序进行优化。C++程序猿在开发代码的过程中难免会遇见此类问题,本文以Boost中的Timer库为例。具体解说怎样測量程序的运行时间。

Boost中Timer库的介绍

Timer是Boost中的一个非常小的时间库。提供时间度量和进度显示功能。当中包括三个组件:(1)计时器类timer、timer类的子类progress_timer类和进度指示类progress_display。

1、 timer

timer位于boost命名空间中,使用之前须要包括头文件<boost/timer.hpp>

timer中有3个函数,分别为:(1)elapsed_max(),返回可度量的最大时间间隔;(2)elapsed_min(),返回可度量的最小时间间隔。(3)elapsed(),返回timer类创建到elapsed()函数调用时所流逝的时间。

比如採用timer类測量std::cout<<"helloworld"<<std::endl;语句的运行时间,程序例如以下所看到的:

#include<iostream>

#include<cstdlib>

using namespace std;

#include <boost/timer.hpp>

using namespace boost;

int main(int argc, char ** argv)

{

timer ter; //创建对象时就開始计时

std::cout<<"helloworld"<<std::endl;

std::cout<<ter.elapsed()<<std::endl;//输出程序运行所消耗的时间,以秒为单位。

std::cout<<ter.elapsed_max()<<std::endl;//输出timer类可以度量的最大时间间隔。以秒为单位。

std::cout<<ter.elapsed_min()<<std::endl;//输出timer类可以度量的最小时间间隔。以秒为单位。

return EXIT_SUCCESS;

}

程序运行结果例如以下图所看到的:

2 、 progress_timer类

progress_timer类是timer类的子类,此类具有一定的特殊性,在系统对此类对象进行析构时会自己主动调用此类的elapsed()函数。输出系统运行程序所消耗的时间。

使用progress_timer类须要包括<boost/progress.hpp>头文件

#include <iostream>

#include <cstdlib>

using namespace std;





#include <boost/progress.hpp>

using namespace boost;





int main(int argc, char **argv)

{

boost::progress_timer pt;

std::cout<<"helloworld"<<std::endl;

std::cout<<pt.elapsed()<<std::endl;//手动调用elapsed()函数,输出程序运行时间



return EXIT_SUCCESS;

}

结果例如以下图所看到的:

3、progress_display类

progress_display类用于显示程序的运行进度。使得用户获得动态感。

使用前须要包括<boost/progress.hpp>头文件

#include <iostream>

#include <cstdlib>

#include <vector>

using namespace std;





#include <boost/progress.hpp>

using namespace boost;





int main(int argc, char **argv)

{

std::vector<int> vec(10000);



//申明进度条

boost::progress_display pd(vec.size());



for (int i=0; i<100; i++)

{

vec.push_back(i);

}





return EXIT_SUCCESS;

}

程序运行结果例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY213MjAwOGZyZWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Boost中的Timer的使用——计算时间流逝的更多相关文章

  1. boost.asio系列——Timer

    同步Timer asio中提供的timer名为deadline_timer,它提供了超时计时的功能.首先以一个最简单的同步Timer为例来演示如何使用它. #include<iostream&g ...

  2. boost之时间timer

    C++一直缺乏对时间和日期的处理能力,一般借助于C的struct tm和time():timer包含三个类其中timer,progress_timer是计时器类,进度指示类是progress_disp ...

  3. iOS中的NSTimer 和 Android 中的Timer

    首先看iOS的, Scheduling Timers in Run Loops A timer object can be registered in only one run loop at a t ...

  4. .NET中的Timer类型用法详解

    这篇文章主要介绍了.NET中的Timer类型用法,较为详细的分析了Timer类型在各种环境下的用法,需要的朋友可以参考下   在.NET FrameWork中有多个Timer,那么怎么根据实际情况进行 ...

  5. 【JavaScript】JavaScript中的Timer是怎么工作的( setTimeout,setInterval)

    原文(http://www.yeeyan.org/articles/view/luosheng/24380) 作为入门者来说,了解JavaScript中timer的工作方式是很重要的.通常它们的表现行 ...

  6. Android中图片占用内存的计算

    Android中图片占用内存的计算 原文链接 http://blog.sina.com.cn/s/blog_4e60b09d01016133.html   在Android开发中,我现在发现很多人还不 ...

  7. Boost中的智能指针(转)

    这篇文章主要介绍 boost中的智能指针的使用.(转自:http://www.cnblogs.com/sld666666/archive/2010/12/16/1908265.html) 内存管理是一 ...

  8. ASP.NET AJAX入门系列(11):在多个UpdatePanle中使用Timer控件

    本文将使用Timer控件更新两个UpdatePanel控件,Timer控件将放在UpdatePanel控件的外面,并将它配置为UpdatePanel的触发器,翻译自官方文档. 主要内容 在多个Upda ...

  9. C# windows服务:C#windows服务中的Timer控件的使用

    C# windows服务程序中的Timer控件的使用问题是如何解决的呢? 今天和同事一起研究了下C# windows服务程序中的Timer控件的使用的写法. 我们在建立一个C# windows服务程序 ...

随机推荐

  1. maven构建springmvc项目

    1.Eclipse中 NEW ->OTHER->Maven->maven project 2.选择项目路径 3.选择项目类型->next->输入groupid和artif ...

  2. mysql优化之参数优化(转)

    1.优化方式 硬件优化=>系统优化=>mysql配置优化=>SCHEMA优化=>sql优化=>其他解决方案(redis or MongoDB or Cassandra o ...

  3. 【HDU 1402】A * B Problem Plus(FFT)

    Problem Description Calculate A * B. Input Each line will contain two integers A and B. Process to e ...

  4. AutoItLibrary之键盘操作(send)

    最近有人问到我键盘操作用什么库?用到库里面的哪个方法?我在这里总结一下,第一次写,有片面的地方还请指出,一块进步.1.首先,用到的库是AutoItLibrary,用到的方法是send:按F5可用看到 ...

  5. 为应用指定多个struts配置文件

    在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿.为了避免struts.xml文件过于庞大.臃肿,提高struts.xml文件的可 ...

  6. zoj 1240

    IBM Minus One Time Limit: 2 Seconds      Memory Limit: 65536 KB You may have heard of the book '2001 ...

  7. PHP基础 变量

    $a=123;$b="123";$c='456';$d=<<<a <div style=" qwerqwrqwt </div>a; / ...

  8. HDU 4334 5-sum

    题目大意: 从5个集合中个选取一个数出来,使5个数相加之和为0 , 判断是否存在这种可能 因为集合数目最多200,那么200^3 = 8000000 , 那么这里很明显要把5个数拆成2个和3个计算,因 ...

  9. POJ3321Apple Tree【dfs 树状数组】

    题目大意:一棵树(不一定是二叉树!!),树的节点上本来都有一个苹果,要求完成以下操作: 1.指定某个节点,如果这个节点原本有苹果则拿去,如果没有苹果则填上一个苹果 2.询问某个节点以及其子树一共有多少 ...

  10. 最大数(cogs 1844)

    [题目描述] 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. 插入操作 ...