随笔分类 -  boost

摘要:1.保存I/O流下面这段代码cout会失效,原因是cout重定向之后失效。#include #include using namespace std;//using namespace boost;int main(){ string filename("c:/test.txt"); cout << "log start" <<endl; if (!filename.empty()) { ofstream fs(filename.c_str()); cout.rdbuf(fs.rdbuf()); } cout << & 阅读全文
posted @ 2013-08-17 22:54 l851654152 阅读(362) 评论(0) 推荐(0)
摘要:1.random随机数产生,需要种子,下面以时间为种子示例:#include #include #include #include #include using namespace std;using namespace boost;int main(){ mt19937 rng(time(0)); for (int i = 0;i < 100;++i) { cout << rng() << "-" <<endl; } return 0;} 阅读全文
posted @ 2013-08-17 12:24 l851654152 阅读(287) 评论(0) 推荐(0)
摘要:STL里的算法已经很好了,在boost里有几个小的算法1.BOOST_FOREACH使用方法,定义一个容器里内部类型数据,容器作为参数传递。#include #include #include #include #include using namespace std;using namespace boost::assign;int main(){ vector v = list_of(1)(2)(3)(4)(5); BOOST_FOREACH(int x,v) { cout #include #include #include #include #include #include us.. 阅读全文
posted @ 2013-08-17 11:29 l851654152 阅读(2040) 评论(0) 推荐(0)
摘要:1.静态数组array,boost对静态数组进行了封装,使用和普通数组一样的初始化式进行初始化。#include #include using namespace std;using namespace boost;int main(){ array ar; ar.back() = 10; array ar1 = {"tiger","dog","cat"}; return 0;}2.dynamic_bitset可以自由扩充二进制位的位数,可以自由进行位操作,还有一堆方便操作判断的函数。#include #include using n 阅读全文
posted @ 2013-08-17 00:51 l851654152 阅读(3458) 评论(0) 推荐(0)
摘要:BOOST_ASSERT在debug模式下有效。#include #include using namespace std;using namespace boost;double fun(int x){ BOOST_ASSERT(x!=0 && "divede by zero"); return 1.0/x;}int main(){ fun(0); return 0;}获取更多的诊断信息:#include #include #include using namespace std;using namespace boost;#define BOOST_EN 阅读全文
posted @ 2013-08-16 15:01 l851654152 阅读(337) 评论(0) 推荐(0)
摘要:正则表示主要用于查找一系列符合规则的对象,而我们之前的查找是对某一特定的字符串进行查找。#include #include #include #include using namespace std;using namespace boost;using namespace boost::xpressive;int main(){ string str; cregex reg = cregex::compile("a.c"); if (regex_match("abc",reg)) { cout << "Ok"<&l 阅读全文
posted @ 2013-08-16 13:57 l851654152 阅读(507) 评论(0) 推荐(0)
摘要:string_algo是用于处理字符串查找,替换,转换等一系列的字符串算法前缀i:表示大小写不敏感后缀_copy:表示不变动输入,返回处理结果的拷贝后缀_if:表示算法需要一个判断式的谓词函数对象。#include #include #include #include using namespace std;using namespace boost;int main(){ string str("readme.txt"); if (ends_with(str,"txt"))//判断后缀 { cout v(str.begin(),str.end()); 阅读全文
posted @ 2013-08-16 10:49 l851654152 阅读(2316) 评论(0) 推荐(0)
摘要:C++标准库中字符串转数值使用函数atoi(),数值转字符串使用printf系列函数。boost中使用转换函数操作符lexical_cast进行转换,实际上是模板函数。自定义类型,要进行转换必须支持输入输出操作符>。#include #include using namespace std;using namespace boost;int main()try{ int x = lexical_cast("100"); long y = lexical_cast("2000L"); float pai = lexical_cast("3. 阅读全文
posted @ 2013-08-16 01:24 l851654152 阅读(555) 评论(0) 推荐(0)
摘要:1.noncopyable用于禁止复制和拷贝的类继承。声明拷贝和赋值函数为私有,将运行时的错误转化为编译期的错误。#include #include using namespace std;using namespace boost;class Mynoncopy {public: Mynoncopy(){}private: Mynoncopy(const Mynoncopy&); void operator=(const Mynoncopy&);};class Test:Mynoncopy{};int main(){ Test t1; //Test t2 = t1;//禁止拷 阅读全文
posted @ 2013-08-15 23:17 l851654152 阅读(398) 评论(0) 推荐(0)
摘要:讲到内存池我们会想到对对象进行动态分配的过程new包含三个过程1.使用operator new分配内存2.使用placement new 初始化3.返回内存地址。分配内存可以分解成分配内存和获取内存两步,只是一般在一步里进行。一.使用pool类,获取已经分配了的内存#include #include using namespace std;using namespace boost;int main(){ pool p1(sizeof(int)); int *p = (int*)p1.malloc();//返回内存 if (p1.is_from(p) == true) { cout #... 阅读全文
posted @ 2013-08-15 23:08 l851654152 阅读(949) 评论(0) 推荐(0)
摘要:内存问题永远是c++中讨论的重要话题1.c98 auto_ptr的实现,auto_ptr的特点是始终只保持一个指针指向对象,若经过赋值或者拷贝之后原指针失效#include using namespace std;templateclass auto_ptr{public: explicit auto_ptr(T* px = 0):m_px(px){} auto_ptr(const auto_ptr& rhs):m_px(rhs.release()) { } auto_ptr& operator=(auto_ptr& rhs) { reset(rhs.release() 阅读全文
posted @ 2013-08-15 13:08 l851654152 阅读(303) 评论(0) 推荐(0)
摘要:date_time库使用的日期基于格里高利历,支持从1400-01-01到9999-12-31的日期。空的构造函数会创建一个值为not_a_date_time的无效日期;顺序传入年月日值则创建一个对应日期的date对象。#include #define BOOST_DATE_TIME_SOURCE#include using namespace boost::gregorian;using namespace std;using namespace boost;int main(){ date d1;//无效的时间 date d2(2013,8,15);//输入年月日 date d3(201. 阅读全文
posted @ 2013-08-15 09:48 l851654152 阅读(674) 评论(0) 推荐(0)
摘要:C++一直缺乏对时间和日期的处理能力,一般借助于C的struct tm和time();timer包含三个类其中timer,progress_timer是计时器类,进度指示类是progress_display.1.timer类,内部封装的是std::clock,精度依赖于具体的编译器和操作系统。只能计算从声明对象到对象结束的时间。#include #include using namespace std;using namespace boost;int main(){ timer t; cout #include #include using namespace std;using names 阅读全文
posted @ 2013-08-15 09:31 l851654152 阅读(1180) 评论(0) 推荐(0)
摘要:ip::tcp的内部类型socket,acceptor以及resolver是TCP通信中最核心的类。1.同步客户端代码:#include #include #include using namespace std;using namespace boost::asio;using namespace boost;int main(){ io_service ios; cout str(100,0); sock.read_some(buffer(str)); cout #include #include using namespace std;using namespace boost::as. 阅读全文
posted @ 2013-08-14 01:27 l851654152 阅读(2569) 评论(0) 推荐(0)
摘要:1.定时器的使用,sleep是等待线程,asio封装了操作系统的异步系统调用select,epoll.io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。#include #include #include #include #include using namespace std;using namespace boost::asio;using namespace 阅读全文
posted @ 2013-08-13 23:37 l851654152 阅读(3637) 评论(0) 推荐(0)
摘要:1.boost里的thread创建之后会立即启动。代码示例:#include #include #include #include #include using namespace std;using namespace boost;mutex io_mu;void printing(int& x,const string str){ for (int i = 0;i #include #include #include #include using namespace std;using namespace boost;mutex io_mu;void printing(int&am 阅读全文
posted @ 2013-08-13 22:54 l851654152 阅读(2222) 评论(0) 推荐(0)
摘要:1.boost里的互斥量类型由mutex表示。代码示例:#include #include #include #include #include using namespace std;using namespace boost;int main(){ mutex mu; try { this_thread::sleep(posix_time::seconds(2)); mu.lock();//锁定cout对象 cout #include #include #include #include using namespace std;using namespace boost;templa... 阅读全文
posted @ 2013-08-13 19:12 l851654152 阅读(16959) 评论(0) 推荐(0)
摘要:boost里的bind,function,signal三个组件都是对用函数做参数(其他算法也用函数做参数),对函数的某一项进行操作。bind主要是对函数参数的作用。function主要是对函数地址的封装。signal主要是异步回调。用函数做参数时1.普通函数需要传递函数地址。2.函数对象需要传递一个对象3.成员函数需要传递对象,指明所调用的成员函数。如果只有对象则符合规则2. 阅读全文
posted @ 2013-08-13 18:48 l851654152 阅读(586) 评论(0) 推荐(0)
摘要:boost里的signal是一个模板类,不区分信号种类,产生信号统一用()调用操作符。1.回调普通函数代码示例:#include #include #include #include using namespace std;using namespace boost::signals2;void slots1(){ cout sig; sig.connect(&slots1); sig.connect(&slots2); sig(); return 0;}2.使用组号和注册位置代码示例,可以使用有名对象,传递的是函数对象。#include #include #include # 阅读全文
posted @ 2013-08-13 18:41 l851654152 阅读(419) 评论(0) 推荐(0)
摘要:boost中function是对函数指针和函数对象的进行封装的模板类。定义示例:function func生成一个空的对象,表示函数参数个数为零,返回类型为int。#include #include #include #include using namespace std;using namespace boost;int f(int a,int b){ return a + b;}int main(){ function fun;//定义一个空的function对象 fun = f;//调用赋值操作符 if (fun) { cout << fun(10,20) << 阅读全文
posted @ 2013-08-13 14:57 l851654152 阅读(223) 评论(0) 推荐(0)