《Boost程序完全开发》跟踪学习训练一:Boost::date_time库的使用
来源:互联网 发布:大数据云计算好吗 编辑:程序博客网 时间:2024/05/22 18:24
主要是记录个人如何按照Boost程序完全开发一书去学习入门Boost库
书中第一个是date_time库首先我们看一下怎么去用
#include <boost\timer.hpp>#include <boost\progress.hpp>#include <iostream>#include "mytimer.h"using namespace boost;void main1(){boost::timer t;std::cout<< "max span" << t.elapsed_max() / 3600 << "h" << std::endl;std::cout << "time espaced" << t.elapsed() << "S" << std::endl;shao::mytimer mytime;std::cout << "mytime spend " << mytime.time_spend() << "S" << std::endl;system("pause");}void test(){boost::progress_timer time;}void main2(){test();std::cin.get();}
看一下boost::timer的实现还是简单的
// boost timer.hpp header file ---------------------------------------------//// Copyright Beman Dawes 1994-99. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)// See http://www.boost.org/libs/timer for documentation.// Revision History// 01 Apr 01 Modified to use new <boost/limits.hpp> header. (JMaddock)// 12 Jan 01 Change to inline implementation to allow use without library// builds. See docs for more rationale. (Beman Dawes) // 25 Sep 99 elapsed_max() and elapsed_min() added (John Maddock)// 16 Jul 99 Second beta// 6 Jul 99 Initial boost version#ifndef BOOST_TIMER_HPP#define BOOST_TIMER_HPP#include <boost/config.hpp>#include <ctime>#include <boost/limits.hpp># ifdef BOOST_NO_STDC_NAMESPACE namespace std { using ::clock_t; using ::clock; }# endifnamespace boost {// timer -------------------------------------------------------------------//// A timer object measures elapsed time.// It is recommended that implementations measure wall clock rather than CPU// time since the intended use is performance measurement on systems where// total elapsed time is more important than just process or CPU time.// Warnings: The maximum measurable elapsed time may well be only 596.5+ hours// due to implementation limitations. The accuracy of timings depends on the// accuracy of timing information provided by the underlying platform, and// this varies a great deal from platform to platform.class timer{ public: timer() { _start_time = std::clock(); } // postcondition: elapsed()==0// timer( const timer& src ); // post: elapsed()==src.elapsed()// ~timer(){}// timer& operator=( const timer& src ); // post: elapsed()==src.elapsed() void restart() { _start_time = std::clock(); } // post: elapsed()==0 double elapsed() const // return elapsed time in seconds { return double(std::clock() - _start_time) / CLOCKS_PER_SEC; } 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. { return (double((std::numeric_limits<std::clock_t>::max)()) - double(_start_time)) / double(CLOCKS_PER_SEC); } double elapsed_min() const // return minimum value for elapsed() { return double(1)/double(CLOCKS_PER_SEC); } private: std::clock_t _start_time;}; // timer} // namespace boost#endif // BOOST_TIMER_HPP
下面就是boost::progress_display进度条的显示
使用案例
#include <boost\progress.hpp>#include <fstream>#include <vector>using namespace boost;using namespace std;void main(){std::vector<string> myvec(100);//文件输出流ofstream outFile("D:\\shao.txt");progress_display progress(myvec.size(),std::cout);vector<string>::iterator myit = myvec.begin();for(;myit != myvec.end();myit++){outFile << *myit << endl;++progress;}std::cin.get();}
下面我们看一下progress_display的源码呢
class progress_display : private noncopyable{ public: //构造函数需要进度条的最大值 和 输出流 默认是控制台 explicit progress_display( unsigned long expected_count, std::ostream & os = std::cout, const std::string & s1 = "\n", //leading strings const std::string & s2 = "", const std::string & s3 = "" ) : noncopyable(), m_os(os), m_s1(s1), m_s2(s2), m_s3(s3) { restart(expected_count); } void restart( unsigned long expected_count ) { _count = _next_tic_count = _tic = 0; _expected_count = expected_count; m_os << m_s1 << "0% 10 20 30 40 50 60 70 80 90 100%\n" << m_s2 << "|----|----|----|----|----|----|----|----|----|----|" << std::endl // endl implies flush, which ensures display << m_s3; if ( !_expected_count ) _expected_count = 1; // prevent divide by zero } // restart //重载+=方法 unsigned long operator+=( unsigned long increment ) { if ( (_count += increment) >= _next_tic_count ) { display_tic(); } return _count; } //重载 ++方法 进度+1 unsigned long operator++() { return operator+=( 1 ); } unsigned long count() const { return _count; } unsigned long expected_count() const { return _expected_count; } private: std::ostream & m_os; // may not be present in all imps const std::string m_s1; // string is more general, safer than const std::string m_s2; // const char *, and efficiency or size are const std::string m_s3; // not issues unsigned long _count, _expected_count, _next_tic_count; unsigned int _tic; void display_tic() { unsigned int tics_needed = static_cast<unsigned int>( (static_cast<double>(_count)/_expected_count)*50.0 ); do { m_os << '*' << std::flush; } while ( ++_tic < tics_needed ); _next_tic_count = static_cast<unsigned long>((_tic/50.0)*_expected_count); if ( _count == _expected_count ) { if ( _tic < 51 ) m_os << '*'; m_os << std::endl; } } // display_tic};
到这进度 计时的类库还是比较简单的 算是入门第一篇吧 作者讲解的挺好 有点缺点都会暴露出来
阅读全文
0 0
- 《Boost程序完全开发》跟踪学习训练一:Boost::date_time库的使用
- 深入浅出学习boost的date_time库(一 )
- Boost库使用----date_time类库
- boost date_time使用
- boost库学习之 date_time库
- boost.date_time
- date_time boost
- boost完全开发指南第2章-处理时间5 (date_time库简单运用)
- boost------result_of的使用(Boost程序库完全开发指南)读书笔记
- boost------ref的使用(Boost程序库完全开发指南)读书笔记
- boost------bind的使用(Boost程序库完全开发指南)读书笔记
- boost------function的使用(Boost程序库完全开发指南)读书笔记
- boost------ref的使用(Boost程序库完全开发指南)读书笔记
- 《Boost程序完全开发指南》
- 被boost的date_time库郁闷了一把
- boost------asio库的使用1(Boost程序库完全开发指南)读书笔记
- boost------asio库的使用2(Boost程序库完全开发指南)读书笔记
- Boost库中date_time库介绍
- Freemarker 语法简介
- remove-duplicates-from-sorted-array
- 闭包的作用
- 2017四川省赛A题Simple Arithmetic
- Hibernate入门08_HQL查询
- 《Boost程序完全开发》跟踪学习训练一:Boost::date_time库的使用
- 死磕《Effective Java中文版》-八挂作者
- Python 中文分词 NLPIR 快速搭建
- 【排序】 快速排序代码-C语言版
- Partition Equal Subset Sum
- Java基础教程9-if-else语句和相关比较运算操作
- 1.2 CPU与GPU间通信
- Linux shell脚本功略第2版笔记--第七章
- 传统编译语言编译过程