1. timer.hpp
timer接口简单,轻巧好用 不适合高精度,跨度大的 如以天,月,年为跨度时间单位 可以使用 date_time
计时用的是标准头文件 <ctime>里的 std::clock()函数 精度依赖操作系统或编译器 难以跨平台
2. progress_timer.hpp 继承 timer
省去 elapsed(),用于自动计时 小工具
progress_timer t;//声明对象就开始计时 自动在作用域结束释放,并自动输出计时时间
题外话1:
java
int j=0;
for(int i=0;i<1000;i++){
j = j++;
}//最终 j 还是等于 0
c++
int j=0;
for(int i=0;i<1000;i++){
j = j++;
}//最终 j 等于 1000
题外话2:
oracle 函数应用 截取字符串 hello 截取掉 h
除了用 substr ,还可以用 trim ;
select trim('h' from 'hello') from dual; ello
SELECT LTRIM('WWhhhhhaT is tHis w W','Wh') FROM DUAL; aT is tHis w W
SELECT RTRIM('WWhhhhhaT is tHis w W','W w') FROM DUAL; WWhhhhhaT is tHis
参考 http://guanhuaing.iteye.com/blog/1498792
3. 扩展 progress_timer
progress_timer 使用方便,但是精度才小数点后两位,有些应用不能满足
可以直接修改 progress_timer.hpp std::streamsize old_prec = m_os.precision( 2 );//2 就是精度
本着开一闭原则,没有预留发挥空间。 模板技术仿造 progress_timer 新类
new_progress_timer.hpp
#include <boost/progress.hpp>
#include <boost/static_assert.hpp>
//使用模板参数实现 progress_timer
template<int N = 2>
class new_progress_timer : public boost::timer
{
public:
//初始化 输出流 m_os ,并用 static_assert 静态断言 保证 N取值 0和10之间
new_progress_timer(std::ostream & os=std::cout):m_os(os){
BOOST_STATIC_ASSERT(N>=0 && N<=10);//静态断言
}
~new_progress_timer(void){
try{
//保存流的状态
std::istream::fmtflags old_flages
= m_os.setf(std::istream::fixed,std::istream::floatfield);
std::streamsize old_prec = m_os.precision(N);
//输出时间
m_os<<elapsed()<<" s\n"<<std::endl;
//恢复流状态
m_os.flags(old_flages);
m_os.precision(old_prec);
}catch(...){}
}
private:
std::ostream & m_os;
};
//使用模板特化,精度为2的直接继承自progress_timer
template<>
class new_progress_timer<2>:public boost::progress_timer{};
#include <stdio.h>
#include <boost/timer.hpp>
#include <boost/progress.hpp>
#include "new_progress_timer.hpp"
using namespace boost;
int main()
{
//1. timer
timer t;
printf("%f h\n",t.elapsed_max()/3600);
printf("%f s\n",t.elapsed_min());
printf("%f s\n",t.elapsed());
printf("\n");
//2. progress_timer 继承 timer
progress_timer pt;
int j=0;
for(int i=0;i<1000;i++){
j = j++;
}
printf("%d \n",j);
//3. 扩展progress_timer 精度为10位
new_progress_timer<10> nt;
for(int i=0;i<10000000;i++){
j = j++;
}
printf("%d \n",j);
}