日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

boost常用库

發布時間:2024/8/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boost常用库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.boost::any

boost::any是一種通用的數據類型,可以將各種類型包裝后統一放入容器內,最重要的它是類型安全的。有點象COM里面的variant。

使用方法:

any::type()?返回包裝的類型

any_cast可用于any到其他類型的轉化

  • #include?<boost/any.hpp>
  • void?test_any()
  • {
  • ????typedef?std::vector<boost::any>?many;
  • ????many?a;
  • ????a.push_back(2);
  • ????a.push_back(string("test"));
  • ????for(unsigned?int?i=0;i<a.size();++i)
  • ????{
  • ????????cout<<a[i].type().name()<<endl;
  • ????????try
  • ????????{
  • ????????????int?result?=?any_cast<int>(a[i]);
  • ????????????cout<<result<<endl;
  • ????????}
  • ????????catch(boost::bad_any_cast?&?ex)
  • ????????{
  • ????????????cout<<"cast?error:"<<ex.what()<<endl;
  • ????????}
  • ????}
  • }
  • ?

    2.boost::array

    boost::array僅僅是對數組一層薄薄的封裝,提供跟各種算法配合的iterator,使用方法很簡單。注意:可以使用{}來初始化array,因為array所有的成員變量都是public的。

  • #include?<boost/array.hpp>
  • void?test_array()
  • {
  • ????array<int,10>?ai?=?{1,2,3};
  • ????for(size_t?i=0;i<ai.size();++i)
  • ????{
  • ????????cout<<ai[i]<<endl;
  • ????}
  • }
  • ?

    3.boost::lexical_cast

    lexical_cast用于將字符串轉換成各種數字類型(int,float,short etc.)。

  • #include?<boost/lexical_cast.hpp>
  • void?test_lexical_cast()
  • {
  • ????int?i?=?boost::lexical_cast<int>("123");
  • ????cout?<<?i?<<?endl;
  • }
  • ?

    4.boost::format

    boost::format是用于替代c里面的sprintf,優點是類型安全,不會因為類型和參數不匹配而導致程序崩潰了,而且還可以重復使用參數。

  • #include?<boost/format.hpp>
  • void?test_format()
  • {
  • ????cout?<<?
  • ????????boost::format("writing?%1%,??x=%2%?:?%3%-th?try")
  • ????????%?"toto"
  • ????????%?40.23
  • ????????%?50
  • ????????<<endl;
  • ????format?f("a=%1%,b=%2%,c=%3%,a=%1%");
  • ????f?%?"string"?%?2?%?10.0;
  • ????cout?<<?f.str()?<<?endl;
  • }
  • ?

    5.boost::tokenizer

    boost::tokenizer是用于切割字符串的,類似于Java里面的StringTokenizer

  • #include?<boost/tokenizer.hpp>
  • void?test_tokenizer()
  • {
  • ????string?s("This?is??,?a?,test!");
  • ????boost::tokenizer<>?tok(s);
  • ????for(tokenizer<>::iterator?beg=tok.begin();?beg!=tok.end();++beg)
  • ????{
  • ????????cout?<<?*beg?<<?" ";
  • ????}
  • }
  • ?

    6.boost::thread

    boost::thread是為了提供跨平臺的thread機制。利用boost::function來完成委托。

  • #include?<boost/thread.hpp>
  • void?mythread()
  • {
  • ????cout<<"hello,thread!"<<endl;
  • }
  • void?test_thread()
  • {
  • ????boost::function<?void?()?>?f(mythread);
  • ????boost::thread?t(f);
  • ????t.join();
  • ????cout<<"thread?is?over!"<<endl;
  • }

  • 7.boost::serialization

    boost::serialization提供object的序列化功能。而且提供好幾種序列化的格式,比如text,binary,xml

  • #include?<boost/archive/text_oarchive.hpp>
  • #include?<boost/archive/text_iarchive.hpp>
  • #include?<boost/archive/xml_oarchive.hpp>
  • void?test_serialization()
  • {
  • ????boost::archive::text_oarchive?to(cout?,?boost::archive::no_header);
  • ????int?i?=?10;
  • ????string?s?=?"This?is?a?test ";
  • ????to?&?i;
  • ????to?&?s;
  • ????ofstream?f("test.xml");
  • ????boost::archive::xml_oarchive?xo(f);
  • ????xo?&?BOOST_SERIALIZATION_NVP(i)?&?BOOST_SERIALIZATION_NVP(s);
  • ????boost::archive::text_iarchive?ti(cin?,?boost::archive::no_header);
  • ????ti?&?i?&?s;
  • ????cout?<<"i="<<?i?<<?endl;
  • ????cout?<<"s="<<?s?<<?endl;
  • }

  • 8.boost::function

    boost::function就是所謂的泛函數,能夠對普通函數指針,成員函數指針,functor進行委托,達到遲調用的效果。

  • #include?<boost/function.hpp>
  • int?foo(int?x,int?y)
  • {
  • ????cout<<?"(foo?invoking)x?=?"<<x?<<?"?y?=?"<<?y?<<endl;
  • ????return?x+y;
  • }
  • struct?test
  • {
  • ????int?foo(int?x,int?y)
  • ????{
  • ????????cout<<?"(test::foo?invoking)x?=?"<<x?<<?"?y?=?"<<?y?<<endl;
  • ????????return?x+y;
  • ????}
  • };
  • void?test_function()
  • {
  • ????boost::function<int?(int,int)>?f;
  • ????f?=?foo;
  • ????cout?<<?"f(2,3)="<<f(2,3)<<endl;
  • ????test?x;
  • ????/*f?=?std::bind1st(std::mem_fun(&test::foo),?&x);*/
  • ????boost::function<int?(test*,int,int)>?f2;
  • ????f2?=?&test::foo;
  • ?
  • ????cout?<<?"f2(5,3)="<<f2(&x,5,3)<<endl;
  • }

  • 9.boost::shared_ptr

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

  • #include?<boost/shared_ptr.hpp>
  • class?Shared
  • {
  • ????public:
  • ????????Shared()
  • ????????{
  • ????????????cout?<<?"ctor()?called"<<endl;
  • ????????}
  • ????????Shared(const?Shared?&?other)
  • ????????{
  • ????????????cout?<<?"copy?ctor()?called"<<endl;
  • ????????}
  • ????????~Shared()
  • ????????{
  • ????????????cout?<<?"dtor()?called"<<endl;
  • ????????}
  • ????????Shared?&?operator?=?(const?Shared?&?other)
  • ????????{
  • ????????????cout?<<?"operator?=??called"<<endl;
  • ????????}
  • };
  • void?test_shared_ptr()
  • {
  • ????typedef?boost::shared_ptr<Shared>?SharedSP;
  • ????typedef?vector<SharedSP>?VShared;
  • ????VShared?v;
  • ????v.push_back(SharedSP(new?Shared()));
  • ????v.push_back(SharedSP(new?Shared()));
  • }
  • 總結

    以上是生活随笔為你收集整理的boost常用库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。