1.boost库是一个C++的准标准库,而且开源,可移植所以发展很快。但是boost库的内容很多,而且库很大,但是boost库的很多代码只需要包含头文件,就可以使用,但是少量的库(如regex,文件系统库需要编译lib文件)。而且boost的文档很全,但是是英文的,而且源码本来看着就很吃力。所以从简单的库开始。
首先boost库的编译,可以参考http://www.cnblogs.com/ComputerG/archive/2011/03/10/1979730.html,而且可以使用sublime通过设定环境变量来编辑自己的代码。具体如下:
第一步:新建C_INCLUDEDE_PATH的环境变量,如果已经存在,在后面添加boost的根目录,我的路径如下:D:\Program Files\DEV-CPP\Include\boost;。
第二步:新建LIBRARY_PATH的环境变量,如果已经存在,在后面添加编译好的.lib文件,如:D:\boost\bin\vc10\lib。(记得添加分号)。至此就可以使用sublime编辑-编译-使用boost库。
其中sublime的配置可以参考:http://www.skymoon.biz/?p=1164
2.boost库的命名规则:
boost_date_time-vc100-mt-gd-1_55.lib
前缀统一为:lib,库名称:boost_,编译器标识:-vc100(vs2010),多线程标识:-mt (mulit-thread),-gd表示debug版标识,-1_55表示是1.55版本的,后缀名:windows位.lib,类unix系统是.a(静态库).so(动态库)。
3.timer库:接口介绍,底层实现。(旧版本)
位置:boost/boost.timer.hpp using namespace boost;
功能:是一个简易的计时工具,精确度为毫秒
接口函数:
elapsed_min() : 返回可以测量的最小精度。
elapsed_max() : 返回timer能够测量的最大范围。
elapsed() : 表示自timer对象被创建之后到调用elapsed()函数所经过的时间,返回double,保留三位有效数字。
私有变量:clock_t start_time;(int的别名)
底层实现:
使用C语言中<ctime>头文件的std::clock()函数:返回自进程启动后经过的时钟数(clock()),而每秒的时钟频率位宏定义的常量:CLOCKS_PER_SEC,那么我们使用(end_clock - start_clock) / CLOCKS_PER_SEC 得到经过的时间。
示例代码:
#include <boost/timer.hpp>
namespace boost {
class timer {
public:
timer(); // postcondition: elapsed()==0
// compiler generated copy constructor, copy assignment, and dtor apply
void restart(); // post: elapsed()==0
double elapsed() const; // return elapsed time in seconds
double elapsed_max() const; // return estimated maximum value for elapsed()
// Portability warning: elapsed_max() may return too high a value on systems
// where std::clock_t overflows or resets at surprising values.
double elapsed_min() const; // return minimum value for elapsed()
}; // timer
} // namespace boost
新版本的timer库。cpu_timer 和auto_cpu_timer
1.auto_cpu_timer类的概述如下:
class auto_cpu_timer : public cpu_timer
{
public:
explicit auto_cpu_timer(short places = default_places);
auto_cpu_timer(short places, const std::string& format);
explicit auto_cpu_timer(const std::string& format);
auto_cpu_timer(std::ostream& os, short places, const std::string& format);
explicit auto_cpu_timer(std::ostream& os, short places = default_places);
auto_cpu_timer(std::ostream& os, const std::string& format);
~auto_cpu_timer() noexcept;
// compiler generated; shown for exposition only
auto_cpu_timer(const auto_cpu_timer&) = default;
auto_cpu_timer& operator=(const auto_cpu_timer&) = default;
// observers
std::ostream& ostream() const noexcept;
short places() const noexcept;
const std::string& format_string() const noexcept;
// actions
void report();
};
使用跨平台的变量(如下),能够实现纳秒级的时间度量。(精度比较高)。
typedef boost::int_least64_t nanosecond_type;
当使用默认构造函数建立auto_cpu_timer类的时候,那么开始自动计时,当函数执行完毕的时候,auto_cpu_timer会自动按照格式汇报使用过的时间。
The default format is " %ws wall, %us user + %ss system = %ts CPU (%p%)\n".
0.017126s wall, 0.015600s user + 0.000000s system = 0.015600s CPU (91.1%)
2.cpu_timer,接口函数定义如下:
class cpu_timer
{
public:
// constructor
cpu_timer() noexcept;
// compiler generated; shown for exposition only
~cpu_timer() noexcept = default;
cpu_timer(const cpu_timer&) noexcept = default;
cpu_timer& operator=(const cpu_timer&) noexcept = default;
// observers
bool is_stopped() const noexcept;
cpu_times elapsed() const noexcept;
std::string format(int places, const std::string& format) const;
std::string format(int places = default_places) const;
// actions
void start() noexcept;
void stop() noexcept;
void resume() noexcept;
};
示例代码:
#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <fstream>
#include <boost/timer/timer.hpp>
//#include <windows.h>
//#include <boost/date_time/gregorian/gregorian.hpp>
int main()
{
boost::timer::cpu_timer t;
boost::timer::auto_cpu_timer t2;
t2.report();//不需要析构,直接汇报经历过的时间。
t.start();//启动开始计时
t.resume();//重新开始计时,并返回之前的cpu_timer。
std::string s = t.format();//默认格式,也可以自己设置。
std::cout<<s;
t.stop();//停止计时。
}