Boost庫使用總結

2021-07-23 07:48:25 字數 4751 閱讀 7142

智慧型指標,與引用計數相關

auto_ptr: 主要為異常安全設計的,在程式正常退出或者異常終止,會呼叫類的析構函式,釋放資源。

複製\賦值是損壞性的操作,所以不能繫結到陣列或者變數指標,也不能將auto_ptr物件儲存在容器中。

auto_ptra(new int(10));

auto_ptrb;

b.reset(new int(5));

a = b;

//先解除a繫結的物件

//將a指向b

//b最後為未繫結狀態

if (a.get()) //來判斷是否初始化auto_ptr例項

shared_ptr:

建構函式

std::shared_ptrp5 (new

int, (int* p), std::allocator());

可以指定deleter

boost::static_visitor

visitor設計模式

不同的操作,使用同一介面訪問、呼叫

visitor模式實現了不改變類本身,卻改變類的行為的功能

#include#include#include#include#includestd::vectorvector;

structoutput :

public boost::static_visitor<>

void operator()(char &c) const

void operator()(std::string &s) const

};intmain()

可以做如下優化

#include#include#include#include#includestd::vectorvector;

structoutput :

public boost::static_visitor<>};

intmain()

boost statechart是boost的狀態機庫,boost狀態機庫是乙個應用程式框架,你可以用它將uml狀態圖快速的轉換為可執行的c++**,而不需要任何的**生成器。它支援幾乎所有的uml特徵,可以直接了當的轉換,並且轉換後的c++**就像對狀態機進行一次文字描述一樣具體可讀性。

編譯鏈結庫

-lboost_thread-mt

類似linux下的thread\mutex\condition實現執行緒同步

boost::mutexm_pending_ios_mutex;

boost::conditionm_pending_ios_empty;

func()

或者

#include #include #include boost::mutex io_mutex;

void count() // worker function }

int main(int argc, char* argv)

mutex和lock

1.  typedef boost::unique_lockreadlock;  

2. typdef boost::shared_lockwritelock;

boost::unique_lock表示獨佔鎖

boost::shared_lock表示共享鎖(可以多讀)

使用boost::shared_mutex構造讀寫鎖時需要使用到boost中的lock幫助類系列

執行緒在中斷點,可以從外部中斷

在乙個執行緒物件上呼叫interrupt()會中斷相應的執行緒。 在這方面,中斷意味著乙個型別為boost::thread_interrupted

timed_join 等待一段時間後停止執行緒

boost::system_time

boost::get_system_time() 獲取系統當前時間

boost::posix_time::microseconds() 換算為指定的時間段

boost::posix_time::ptime則用於定義乙個位置無關的時間

boost::posix_time::neg_infin

boost::this_thread::sleep()

侵入式指標

相比標準庫std::list(非侵入式指標)

兩者的主要區別:

std::list的使用者資料並不擁有其在鍊錶中的位置資訊

為了刪除這個資料,你必須要首先找到這個資料在std::list中的位置,然後呼叫list::erase來刪除這個使用者資料。而查詢這個動作的時間複雜度為o(n/2)。

當你需要頻繁插入刪除資料並且你需要查詢才知道資料所在位置的時候,std::list或許並不是乙個特別好的選擇。

boost::intrusive::list的優點:

可以通過節點自己,直接刪除鍊錶中對應的節點

當然了如果直接使用

boost::intrusive::list

的erase

方法的話,那麼和

std::list

之間沒有什麼差別。所以我們需要使用

auto_unlinkmode.

比較常用的 pseudo-random number generator 是 hellekalek1995(少數幾維),mt11213b(可到 350d)和 mt19937(可到 623d)。

隨機數生成器:

boost

一共提供了

17種型別偽隨機發生器供使用者選擇,它們是:

minstd_rand,  rand48, lrand48,ecuyer1988, kreutzer1986, hellekalek1995, mt11213b, mt19937, lagged_fibonacci607, lagged_fibonacci1279, lagged_fibonacci2281, lagged_fibonacci3217,lagged_fibonacci4423, lagged_fibonacci9689, lagged_fibonacci19937,lagged_fibonacci23209, lagged_fibonacci44497

boost random提供了如下的分布函式:

uniform_smallint------ 乙個整數集上的離散均勻分布

uniform_int ------乙個整數集上的離散均勻分布

uniform_01 ------[0, 1)上的連續均勻分布

uniform_real------ [ min, max)上的連續均勻分布

bernoulli_distribution------ 伯努利分布

geometric_distribution------ 幾何分布

********_distribution------ 三角分布

exponential_distribution------ 指數分布

normal_distribution------ 正態分佈

lognormal_distribution------ 對數正態分佈

uniform_on_sphere------ 球面上的均勻分布

生成隨機數

typedef boost::mt11213brngen_t;

rngen_t rng;

boost::uniform_int(min,max)(rng);

生成在(min,max)整數集上,以mt11213b為隨機數生成器的離散均勻分布

若配置檔案中存在相同項會報錯

terminate called after throwing an instanceof'boost::exception_detail::clone_impl>'

what():  /etc/zbkc/zbkc.conf(122):duplicate section name

讀取檔案read_ini(fn, pt)

寫檔案 write_ini(fn, pt)

boost_foreach可以方便的遍歷stl容器

#includevector_v;

boost_foreach(int32_t value,_v)

同時元素還支援引用,const,比如上面**還可以寫成:

vector_v;

boost_foreach(int32_t& value,_v)

如果元素內容是結構體之類,引用可以防止拷貝~~

對於map的訪問有一點特殊,因為map的元素是std::pair,所以需要寫成這樣:

std::map_map;

typedef const std::map::value_type const_pair;

boost_foreach(const_pair& node,_map)

或者

pairp;

boost_foreach(p, _map)

boost::shared_lock 非獨佔鎖,讀鎖

boost::unique_lock型別的非獨佔鎖

執行緒本地儲存

boost::thread_specific_ptrtls;

類似done

boost常用庫的使用總結

一 多執行緒 1 thread庫相關的,c 多執行緒是乙個複雜的事情,windows mfc提供了cwinthread類,waitforsingleobject等待 執行緒 linux系統提供了createthread,thread join來 執行緒。boost thread就比較方便了 1 bo...

boost庫學習總結

第一次使用boost庫是因為網路程式設計,由於時間比較緊,沒有時間每個庫都學,所以前期想找個專門的boost庫網路教程 以前自己就用過socket寫過,但是為了跨平台,而且boost庫這麼好,還是趁早學吧 終於在網上找到乙個很好的boost庫教程系列。之所以用framework是因為ios裝置和io...

boost互斥鎖 boost鎖使用總結

boost鎖的概述 boost庫中提供了mutex類與lock類,通過組合可以輕易的構建讀寫鎖與互斥鎖。舉個通俗的例子,如果共享資源是乙個自動鎖住的房間,互斥體是鑰匙,進入房間必須取鑰匙,離開房間應該還鑰匙。這就對應著互斥體的lock 取鑰匙 和unlock 還鑰匙 動態分配記憶體存在類似的情況。如...