boost库 tbb_boost库的常用组件的使用

1.boost::any

boost::any是一种通用的数据类型,可以将各种类型包装后统一放入容器内

最重要的它是类型安全的。有点象COM里面的variant.

使用方法:

any::type() 返回包装的类型

any_cast可用于any到其他类型的转化

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngvoidtest_any()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png typedef std::vector<:any>many;

df37983f39daa189b8c814e01a6a9011.png many a;

df37983f39daa189b8c814e01a6a9011.png a.push_back(2);

df37983f39daa189b8c814e01a6a9011.png a.push_back(string("test"));

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.pngfor(unsignedinti=0;i

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png  cout<

df37983f39daa189b8c814e01a6a9011.pngtryf70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.pngintresult=any_cast(a[i]);

df37983f39daa189b8c814e01a6a9011.png   cout<

4a5daaec04350a363f186a4d2c5ed6ce.png  }df37983f39daa189b8c814e01a6a9011.pngcatch(boost::bad_any_cast&ex)

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png   cout<

4a5daaec04350a363f186a4d2c5ed6ce.png  }4a5daaec04350a363f186a4d2c5ed6ce.png }0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

2.boost::array

boost::array仅仅是对数组一层薄薄的封装,提供跟各种算法配合的iterator,使用方法很简单

注意:可以使用{}来初始化array,因为array所有的成员变量都是public的

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngvoidtest_array()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png arrayai=918e8df969f9f8c8d002f25cda86cade.png{1,2,3};

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.pngfor(size_t i=0;i

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png  cout<

4a5daaec04350a363f186a4d2c5ed6ce.png }0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

3.boost::lexical_castlexical_cast用于将字符串转换成各种数字类型(int,float,short etc.)

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngvoidtest_lexical_cast()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.pnginti=boost::lexical_cast("123");

df37983f39daa189b8c814e01a6a9011.png cout<

0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

4.boost::format

boost::format是用于替代c里面的sprintf,优点是类型安全,不会因为类型和参数不匹配而导致程序崩溃了

而且还可以重复使用参数

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngvoidtest_format()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png cout<<:format>

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.png format f("a=%1%,b=%2%,c=%3%,a=%1%");

df37983f39daa189b8c814e01a6a9011.png f%"string"%2%10.0;

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.png cout<

0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

5.boost::tokenizerboost::tokenizer是用于切割字符串的,类似于Java里面的StringTokenizer。

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngvoidtest_tokenizer()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.pngstrings("This is  , a ,test!");

df37983f39daa189b8c814e01a6a9011.png boost::tokenizer<>tok(s);

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.pngfor(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg)918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png       cout<

4a5daaec04350a363f186a4d2c5ed6ce.png }0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

6.boost::thread

boost::thread是为了提供跨平台的thread机制。利用boost::function来完成委托。

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngvoidmythread()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png cout<

0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.pngvoidtest_thread()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png boost::functionf(mythread);

df37983f39daa189b8c814e01a6a9011.png boost::thread t(f);

df37983f39daa189b8c814e01a6a9011.png t.join();

df37983f39daa189b8c814e01a6a9011.png cout<

0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

7.boost::serializationboost::serialization提供object的序列化功能。而且提供好几种序列化的格式,比如text,binary,xml

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngvoidtest_serialization()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png boost::archive::text_oarchive to(cout , boost::archive::no_header);

df37983f39daa189b8c814e01a6a9011.pnginti=10;

df37983f39daa189b8c814e01a6a9011.pngstrings="This is a test\n";

df37983f39daa189b8c814e01a6a9011.png to&i;

df37983f39daa189b8c814e01a6a9011.png to&s;

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.png ofstream f("test.xml");

df37983f39daa189b8c814e01a6a9011.png boost::archive::xml_oarchive xo(f);

df37983f39daa189b8c814e01a6a9011.png xo&BOOST_SERIALIZATION_NVP(i)&BOOST_SERIALIZATION_NVP(s);

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.png boost::archive::text_iarchive ti(cin , boost::archive::no_header);

df37983f39daa189b8c814e01a6a9011.png ti&i&s;

df37983f39daa189b8c814e01a6a9011.png cout<

df37983f39daa189b8c814e01a6a9011.png cout<

0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

8.boost::function

boost::function就是所谓的泛函数,能够对普通函数指针,成员函数指针,functor进行委托,达到迟调用的效果

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngintfoo(intx,inty)

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png cout<

df37983f39daa189b8c814e01a6a9011.pngreturnx+y;

0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.pngstructtest

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.pngintfoo(intx,inty)

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png  cout<

df37983f39daa189b8c814e01a6a9011.pngreturnx+y;

4a5daaec04350a363f186a4d2c5ed6ce.png }0ac3a2d53663ec01c7f7225264eeefae.png};

cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.pngvoidtest_function()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png boost::functionf;

df37983f39daa189b8c814e01a6a9011.png f=foo;

df37983f39daa189b8c814e01a6a9011.png cout<

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.png test x;

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png/**//*f = std::bind1st(

4a5daaec04350a363f186a4d2c5ed6ce.png      std::mem_fun(&test::foo), &x);*/df37983f39daa189b8c814e01a6a9011.png boost::functionf2;

df37983f39daa189b8c814e01a6a9011.png f2=&test::foo;

df37983f39daa189b8c814e01a6a9011.png  

df37983f39daa189b8c814e01a6a9011.png cout<

0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

9.boost::shared_ptr

boost::shared_ptr就是智能指针的实现,不象std::auto_ptr,它是可以stl的容器一起使用的,非常的方便

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.pngclassShared

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.pngpublic:

df37983f39daa189b8c814e01a6a9011.png Shared()

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png  cout<

4a5daaec04350a363f186a4d2c5ed6ce.png }df37983f39daa189b8c814e01a6a9011.png Shared(constShared&other)

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png  cout<

4a5daaec04350a363f186a4d2c5ed6ce.png }df37983f39daa189b8c814e01a6a9011.png~Shared()

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png  cout<

4a5daaec04350a363f186a4d2c5ed6ce.png }df37983f39daa189b8c814e01a6a9011.png Shared&operator=(constShared&other)

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png  cout<

4a5daaec04350a363f186a4d2c5ed6ce.png }0ac3a2d53663ec01c7f7225264eeefae.png};

cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.pngvoidtest_shared_ptr()

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.png typedef boost::shared_ptrSharedSP;

df37983f39daa189b8c814e01a6a9011.png typedef vectorVShared;

df37983f39daa189b8c814e01a6a9011.png VShared v;

df37983f39daa189b8c814e01a6a9011.png v.push_back(SharedSP(newShared()));

df37983f39daa189b8c814e01a6a9011.png v.push_back(SharedSP(newShared()));

0ac3a2d53663ec01c7f7225264eeefae.png}cbef093dcc044b2793832001e2365e43.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值