boost是一個(gè)準(zhǔn)標(biāo)準(zhǔn)庫,相當(dāng)于STL的延續(xù)和擴(kuò)充,它的設(shè)計(jì)理念和STL比較接近,都是利用泛型讓復(fù)用達(dá)到最大化。不過對比STL,boost更加實(shí)用。STL集中在算法部分,而boost包含了不少工具類,可以完成比較具體的工作。
boost主要包含一下幾個(gè)大類:字符串及文本處理、容器、迭代子(Iterator)、算法、函數(shù)對象和高階編程、泛型編程、模板元編程、預(yù)處理元編程、并發(fā)編程、數(shù)學(xué)相關(guān)、糾錯(cuò)和測試、數(shù)據(jù)結(jié)構(gòu)、輸入/輸出、跨語言支持、內(nèi)存相關(guān)、語法分析、雜項(xiàng)。 有一些庫是跨類別包含的,就是既屬于這個(gè)類別又屬于那個(gè)類別。
在文本處理部分,conversion/lexcial_cast類用于“用C++”的方法實(shí)現(xiàn)數(shù)字類型和字符串之間的轉(zhuǎn)換。 主要是替代C標(biāo)準(zhǔn)庫中的 atoi、 itoa之類的函數(shù)。當(dāng)然其中一個(gè)最大的好處就是支持泛型了。
format庫提供了對流的“printf-like”功能。printf里使用%d、%s等等的參數(shù)做替換的方法在很多情況下還是非常方便的,STL的iostream則缺乏這樣的功能。format為stream增加了這個(gè)功能,并且功能比原始的printf更強(qiáng)。
regex,這個(gè)不多說了,正則表達(dá)式庫。如果需要做字符串分析的人就會理解正則表達(dá)式有多么有用了。
spirit,這個(gè)是做LL分析的框架,可以根據(jù)EBNF規(guī)則對文件進(jìn)行分析。(不要告訴我不知道什么是EBNF)。做編譯器的可能會用到。一般人不太用的到。
tokenizer庫。我以前經(jīng)常在CSDN上看到有人問怎么把一個(gè)字符串按逗號分割成字符串?dāng)?shù)組。也許有些人很羨慕VB的split函數(shù)?,F(xiàn)在,boost的tokenizer也有相同的功能了,如果我沒記錯(cuò)的話,這個(gè)tokenizer還支持正則表達(dá)式,是不是很爽?
array: 提供了常量大小的數(shù)組的一個(gè)包裝,喜歡用數(shù)組但是苦惱數(shù)組定位、確定數(shù)組大小等功能的人這下開心了。
dynamic_bitset,動(dòng)態(tài)分配大小的bitset,我們知道STL里有個(gè)bitset,為位運(yùn)算提供了不少方便。可惜它的大小需要在編譯期指定?,F(xiàn)在好了,運(yùn)行期動(dòng)態(tài)分配大小的bitset來了。
graph。提供了圖的容器和相關(guān)算法。我還沒有在程序中用到過圖,需要用的人可以看看。
multi_array提供了對多維數(shù)組的封裝,應(yīng)該還是比較有用的。
并發(fā)編程里只有一個(gè)庫,thread,提供了一個(gè)可移植的線程庫,不過在Windows平臺上我感覺用處不大。因?yàn)樗腔赑osix線程的,在Windows里對Posix的支持不是很好。
接下來的 數(shù)學(xué)和數(shù)值 類里,包含了很多數(shù)值處理方面的類庫,數(shù)學(xué)類我也不太熟,不過這里有幾個(gè)類還是很有用的,比如rational分?jǐn)?shù)類,random隨機(jī)數(shù)類,等等。
static_assert,提供了編譯器的assert功能。
test庫,一個(gè)單元測試框架,非常不錯(cuò)。
concept_check提供了泛型編程時(shí),對泛型量的一點(diǎn)檢查,不是很完善,不過比沒有好。
數(shù)據(jù)類型類any,一個(gè)安全的可以包含不同對象的類。把它作為容器的元素類型,那么這個(gè)容器就可以包含不同類型的元素。比用void *要安全。
compressed_pair,跟STL里的pair差不多。不過對空元素做了優(yōu)化。
tuple,呵呵,也許是某些人夢寐以求的東西。可以讓函數(shù)返回多個(gè)值。
跨語言支持:Python,呵呵,好東東啊,可以將C++的類和函數(shù)映射給python使用。以下為幾個(gè)CSDN上的關(guān)于boost.python的中文資料:http://dev.csdn.net/article/19/19828.shtm,http://dev.csdn.net/article/19/19829.shtm,http://dev.csdn.net/article/19/19830.shtm,http://dev.csdn.net/article/19/19831.shtm
pool:內(nèi)存池,呵呵,不用害怕頻繁分配釋放內(nèi)存導(dǎo)致內(nèi)存碎片,也不用自己辛辛苦苦自己實(shí)現(xiàn)了。
smart_ptr:智能指針,這下不用擔(dān)心內(nèi)存泄漏的問題了吧。不過,C++里的智能指針都還不是十全十美的,用的時(shí)候小心點(diǎn)了,不要做太技巧性的操作了。
date_time,這個(gè)是平臺、類庫無關(guān)的實(shí)現(xiàn),如果程序需要跨平臺,可以考慮用這個(gè)。
timer,提供了一個(gè)計(jì)時(shí)器,雖然不是Windows里那種基于消息的計(jì)時(shí)器,不過據(jù)說可以用來測量語句執(zhí)行時(shí)間。
uitlity里提供了一個(gè)noncopyable類,可以實(shí)現(xiàn)“無法復(fù)制”的類。很多情況下,我們需要避免一個(gè)類被復(fù)制,比如代表文件句柄的類,文件句柄如果被兩個(gè)實(shí)例共享,操作上會有很多問題,而且語義上也說不過去。一般的避免實(shí)例復(fù)制的方法是把拷貝構(gòu)造和operator=私有化,現(xiàn)在只要繼承一下這個(gè)類就可以了,清晰了很多。
value_initialized:數(shù)值初始化,可以保證聲明的對象都被明確的初始化,不過這個(gè)真的實(shí)用嗎?似乎寫這個(gè)比直接寫初始化還累。呵呵,仁者見仁了。
這里面除了regex、python和test需要編譯出庫才能用,其他的大部分都可以直接源代碼應(yīng)用,比較方便。其實(shí)這些庫使用都不難。最主要的原因是有些庫的使用需要有相關(guān)的背景知識,比如元編程、STL、泛型編程等等。
-
Boost
+關(guān)注
關(guān)注
5文章
370瀏覽量
48106 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73651 -
STL
+關(guān)注
關(guān)注
0文章
86瀏覽量
18327
原文標(biāo)題:C++ Boost庫簡介
文章出處:【微信號:C_Expert,微信公眾號:C語言專家集中營】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論