C++boost庫(kù)總結(jié)精編版_第1頁(yè)
C++boost庫(kù)總結(jié)精編版_第2頁(yè)
C++boost庫(kù)總結(jié)精編版_第3頁(yè)
C++boost庫(kù)總結(jié)精編版_第4頁(yè)
C++boost庫(kù)總結(jié)精編版_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第 1 章 Boost 程序庫(kù)總論1. 使用 Boost ,將大大增強(qiáng) C+ 的功能和表現(xiàn)力第 2 章時(shí)間與日期1.timer提供毫秒級(jí) 的計(jì)時(shí)精度,內(nèi)部是通過(guò)std:clock取時(shí)間的2.progress_timer自動(dòng)打印某生命周期的執(zhí)行時(shí)間3. 原則上程序庫(kù)的代碼是不應(yīng)該被用戶修改的4. progress_display可以在 控制臺(tái) 上顯示程序的執(zhí)行進(jìn)度5.date_time庫(kù)能很好的表示日期時(shí)間概念,并能和 C 的時(shí)間結(jié)構(gòu)tm進(jìn)行友好互轉(zhuǎn)6. date 類提供年月日和星期幾的概念。 data 可通過(guò) from_string或from_undelimited_string從字符串解析而

2、來(lái),可通過(guò)to_simple_string、to_iso_string、to_extended_iso_string轉(zhuǎn)換為字符串。(精度到天的DateTime)7. day_clock 是精度到天的時(shí)鐘8.date_duration表示的是天精度的時(shí)間間隔概念,別名為days ,另外還有years 、months、 weeks9. date_period 表示兩個(gè) date 之間的日期區(qū)間(精度到天的TimeSpan )10. date_iterator、week_iterator、month_iterator和 year_iterator是時(shí)間的迭代器11. boost: greorian:

3、gregorian_calendar中有實(shí)用靜態(tài)方法:is_leap_year、end_of_month_day112. time_duration表示微妙或納秒級(jí)的時(shí)間概念, 幾個(gè)實(shí)用子類: hours 、minutes 、seconds 、 millisec/milliseconds、microsec/microseconds、nanosec/nannoseconds13. duration_from_string可以從字符串解析time_duration14. ptime用來(lái)表示時(shí)間點(diǎn),相當(dāng)于date和 time_duration的組合??梢杂胻ime_from_string或 from

4、_iso_string解析。( TimeSpan)ptime now1 = second_clock:local_time(); /得到本地當(dāng)前秒精度時(shí)間ptime now2 = microsec_clock:universal_time(); /得到本地當(dāng)前微秒精度時(shí)間15. time_period表示兩個(gè) ptime 之間的時(shí)間區(qū)間。( DateTime )16. 時(shí)間迭代器沒(méi)有日期迭代器那么多,只有time_iterator一個(gè)17. (boost 時(shí)間日期庫(kù)亂、破碎、過(guò)度設(shè)計(jì))第3 章內(nèi)存管理1. scoped_ptr 類似 auto_ptr ,但其一旦獲得對(duì)象的管理權(quán),你就無(wú)法再?gòu)乃?/p>

5、那里取回來(lái)。該智能指針只希望在本作用域里使用, 不希望被轉(zhuǎn)讓。 auto_ptr 有意設(shè)計(jì)成所有權(quán)的自動(dòng)轉(zhuǎn)讓, scoped_ptr 有意設(shè)計(jì)成所有權(quán)的無(wú)法轉(zhuǎn)讓。 scoped_ptr 和auto_ptr均不能作為容器元素。2.scoped_array包裝的是 new產(chǎn)生的指針,并調(diào)用的是delete。往往是用來(lái)和C 代碼保持兼容,一般不推薦使用23.無(wú)論是編譯器還是程序員都很難區(qū)分出new和 new分配的空間,錯(cuò)誤的運(yùn)用delete將導(dǎo)致資源異常4. 在 C+ 歷史上曾經(jīng)出現(xiàn)過(guò)無(wú)數(shù)的引用計(jì)數(shù)型智能指針實(shí)現(xiàn),但沒(méi)有一個(gè)比得上boost:shared_ptr,在過(guò)去、現(xiàn)在和將來(lái),它都是最好的5.

6、shared_ptr支持的轉(zhuǎn)型有:static_pointer_cast<T>、 const_pointer_cast<T>、dynamic_pointer_cast<T>,返回的結(jié)果是shared_ptr,并能保證這些指針的引用計(jì)數(shù)正確6.用 shared_ptr可以消除代碼中顯示的delete ,用 make_shared、allocate_shared可以消除代碼中顯示的new7. 橋接模式 (bridge) 是一種結(jié)構(gòu)型設(shè)計(jì)模式, 它把類的具體實(shí)現(xiàn)細(xì)節(jié)對(duì)用戶隱藏起來(lái),以達(dá)到類之間的最小耦合關(guān)系。在具體編程實(shí)踐中橋接模式也被稱為pimpl或者h(yuǎn)andl

7、e/body慣用法,它可以將頭文件的依賴關(guān)系降到最小,減少編譯時(shí)間,而且可以不使用虛函數(shù)實(shí)現(xiàn)多態(tài)8.get_deleter(shared_ptr<T> const& p)可以獲得刪除器。shared_ptr的刪除器在處理某些特殊資源時(shí)非常有用,它使得用戶可以定制、擴(kuò)展 shared_ptr的行為,使其不僅僅能夠管理內(nèi)存資源,而是稱為一個(gè)“萬(wàn)能 ”的資源管理工具9.對(duì)應(yīng) shared_ptr,也有一個(gè)shared_array,scoped_array和 shared_array均不對(duì) operator做下標(biāo)檢測(cè)10. weak_ptr是為配合shared_ptr而引入的,更像

8、是shared_ptr的一個(gè)助手而不是智能指針,其沒(méi)有重載operator*和-> ,不具有普通指針的行為。它最大的作用在于協(xié)助shared_ptr工作,像旁觀者那樣觀測(cè)資源的使用情況11. weak_ptr被設(shè)計(jì)為與shared_ptr共同工作,可以從一個(gè)shared_ptr或者另一個(gè) weak_ptr對(duì)象構(gòu)造,獲得資源的觀測(cè)權(quán) 。但 weak_ptr沒(méi)有共享資源,它的構(gòu)3造不會(huì)引起指針引用計(jì)數(shù)的增加。同樣,在weak_ptr析構(gòu)時(shí)也不會(huì)導(dǎo)致引用計(jì)數(shù)的減少,它只是一個(gè)靜靜的觀察者12. 獲得 this 指針的 shared_ptr,使對(duì)象自己能夠產(chǎn)生shared_ptr管理自己: cl

9、assT : public enable_shared_from_this<T>, then shared_ptrshared_from_this().13. intrusive_ptr是一個(gè)侵入式的引用計(jì)數(shù)型指針。當(dāng)對(duì)內(nèi)存占用的要求非常嚴(yán)格,或現(xiàn)存代碼已經(jīng)有了引用計(jì)數(shù)機(jī)制時(shí)可以考慮。一般情況不推薦使用。14. pool 為固定塊大小 的類似 malloc 的原生內(nèi)存分配器,支持?jǐn)?shù)組式分配,一般情況下不必對(duì)分配的內(nèi)存調(diào)用 free() 。只分配原生內(nèi)存,不調(diào)用構(gòu)造函數(shù),回收不調(diào)用析構(gòu)函數(shù),最好不要用于對(duì)象。15. singleton_pool 和 pool 接口完全一致,但為單件線

10、程安全,同樣要求編譯期指定要分配的原生內(nèi)存塊大小16. object_pool 為特定類型的對(duì)象池,不支持?jǐn)?shù)組式分配,支持對(duì)象分配和對(duì)象原生內(nèi)存分配17. pool_alloc和 fast_pool_allocator是 boost提供的兩個(gè)STL 分配器。除非有特別需求,我們應(yīng)該總使用 STL 實(shí)現(xiàn)自帶的內(nèi)存分配器。 使用定制的分配器需要經(jīng)過(guò)仔細(xì)的測(cè)試,以保證它與容器可以共同工作。18. 內(nèi)存管理是 C+ 程序開(kāi)發(fā)中永恒的話題,因?yàn)闆](méi)有 GC ,小心謹(jǐn)慎的管理內(nèi)存等系統(tǒng)資源是每一個(gè) C+ 程序員都必須面對(duì)的問(wèn)題第4章實(shí)用工具1. private 繼承自 noncopyable 可以編譯時(shí)禁止

11、對(duì)象拷貝語(yǔ)法2.C+ 靜態(tài)強(qiáng)類型的優(yōu)點(diǎn)有時(shí)候反而是阻礙程序員生產(chǎn)力的“缺陷 ”43.typeof庫(kù)使用宏模擬了C+0X中的 typedef和 auto關(guān)鍵字,可以減輕書(shū)寫(xiě)繁瑣的變量類型聲明工作,簡(jiǎn)化代碼。對(duì)于用戶自定義類型需要手工用宏注冊(cè)。(語(yǔ)法并沒(méi)那么好看,不準(zhǔn)備使用)4. optional<T> 使用 “容器 ”語(yǔ)義,包裝了 “可能產(chǎn)生無(wú)效值 ”的對(duì)象,實(shí)現(xiàn)了 “未初始化”的概念( Nullable<T> )5.optional<T> make_optional(bool condition, T const& v)用來(lái)簡(jiǎn)單構(gòu)建optional

12、對(duì)象,但不能處理 optional<T&>的情況。 ( 此乃雞肋 )6.optional<string> str(in_place("string就地創(chuàng)建 ") ,而不需拷貝臨時(shí)對(duì)象,避免大對(duì)象的拷貝開(kāi)銷7. 用于初始化的 assign 庫(kù)(僅限于 STL 標(biāo)準(zhǔn)容器,通過(guò)重載 “ +=”和“ , 運(yùn)”算符實(shí)現(xiàn)) :#include <boost/assign.hpp> using namespace boost; vector<int> v; v += 1,2,3,4,5,6*6; set<string>

13、s; s += "cpp", "java"map<int, string> m; m += make_pair(1, "one"), make_pair(2, "2");8. assign 還支持 insert() 、 push_front() 、 push_back() (通過(guò)重載 “ () 實(shí)”現(xiàn)): vector<int> v; push_back(v)(1)(2)(3)(4)(5);list<string> l; push_front(l)("cpp"

14、)("java"); set<double> s; insert(s)(3.14)(0.618)(1.732); map<int, string> m; insert(m)(1, "one")(2, "two");9. assign 也可以將 “ () 和”“ , 混”用: vector<int> v;push_back(v), 1, 2, 3, 4, 5;5push_back(v)(6), 7, 64 / 8, (9), 10;deque<string> d;push_front(d)

15、() = "cpp", "java"10. assign list_of()函數(shù):vector<int> v = list_of(1)(2)(3);deque<string> d = (list_of("cpp")("java");set<int> s = (list_of(10), 20, 30, 40);map<int, string> m = list_of(make_pair(1, "one") (make_pair(2, "tw

16、o")如果需要將括號(hào)與逗號(hào)混合使用,則要求最外側(cè)加一個(gè)括號(hào),否則編譯器無(wú)法推導(dǎo)11. assign map_list_of/pair_list_of函數(shù):map<int, int> m1 = map_list_of(1, 2)(3, 4)(5, 6)map<int, string> m2 = map_list_of(1, "one")(2, "two")12. assign tuple_list_of用戶初始化元素類型為tuple的容器13. assign repeat()可以重復(fù)生成值,repeat_fun()可以重復(fù)

17、無(wú)參函數(shù)或仿函數(shù),range()則可以從序列中取出部分或全部:vector<int> v = list_of(1).repeat(3, 2)(3)(4)(5); / v = 1,2,2,2,3,4,5multiset<int> ms; insert(ms).repeat_fun(5, &ran).repeat(2, 1), 10; /ms = x,x,x,x,x,1,1,10deque<int> d; push_front(d).range(v.begin(), v.begin() + 5); /d=3,2,2,2,114. assign 支持 8

18、個(gè) STL 標(biāo)準(zhǔn)容器( vector 、string 、 deque 、list 、set 、multiset、map 、 multimap),對(duì)容器適配器(stack 、 queue 、 priority_queue)則需要通過(guò) to_adapter():6stack<int> stk = (list_of(1), 2, 3).to_adapter();queue<string> q = (list_of("cpp")("java").repeat(2, "C#").to_adapter();priority

19、_queue<double> pq = (list_of(1.414), 1.732).to_adapter();15. assign 也支持部分不在STL 中的非標(biāo)準(zhǔn)容器slist 、 hash_map、 hash_set ,因?yàn)槠浞蠘?biāo)準(zhǔn)容器定義,同時(shí)也支持大部分boost容器: array、 circular_buffer、unordered等16. assign list_of()嵌套:vector<vector<int>> v = list_of(list_of(1)(2) list_of(list_of(3)(4);v += list_of(5)

20、(6), list_of(7)(8);17. assign ref_list_of()、cref_list_of()、 ptr_push_back()、 ptr_list_of()還支持以引用或指針來(lái)構(gòu)造初始化:int a = 1, b = 2, c = 3;vector<int> v = ref_list_of<3>(a)(b)(c);18. boost:swap 是對(duì) std:swap 的增強(qiáng),并且擴(kuò)充了對(duì)數(shù)組的支持: int a110; std:fill_n(a1, 10, 5);int a210; std:file_n(a2, 10, 20);boost:swa

21、p(a1, a2);19. 單件 boost:details:pool:singleton_default<T>在 main之前進(jìn)行構(gòu)造, 支持繼承或非繼承形式(最恨main之前的事情了)20. 單件 boost:serialization:singleton<T>在 main之前進(jìn)行構(gòu)造, 支持繼承或非繼承形式。繼承方式更徹底一些,非繼承方式不影響原有代碼21. boost:tribool三態(tài) bool , indeterminate(tribool)可判斷一個(gè)三態(tài)bool是否處于不確定狀態(tài)722. 選擇 optional<bool> 還是 tribool

22、 :如果返回值可能是無(wú)效的,那么就是 optional<bool> ,如果返回值總是確定的, 但可能無(wú)法確定其意義, 那么就用 tribool(最多自己隨手定義個(gè) enum 狀態(tài),為了這點(diǎn)需求需要記住這一堆名稱和細(xì)節(jié)!)23. using namespace std:rel_ops;則一旦為類定義了operator=和 <,則自動(dòng)具有!= 、 >、 <= 和 >= 的功能。 boost operators庫(kù)提供了對(duì)該功能的增強(qiáng),使用時(shí)只需繼承自這些類并提供指定的operator重載即可獲得附送的重載:1. equality_comparable<T&g

23、t;:要求提供 = ,可自動(dòng)實(shí)現(xiàn) != ,相等語(yǔ)義2. less_than_comparable<T>:要求提供 <,可自動(dòng)實(shí)現(xiàn) >、 <= 、 >=3. addable<T> :要求提供 += ,可自動(dòng)實(shí)現(xiàn) +4. subtractable<T> :要求提供 -= ,可自動(dòng)實(shí)現(xiàn) -5. incrementable<T>:要求提供前置 + ,可自動(dòng)實(shí)現(xiàn)后置 +6. decrementable<T>:要求提供前置 - ,可自動(dòng)實(shí)現(xiàn)后置 -7. equivalent<T> :要求提供 <,可自動(dòng)實(shí)

24、現(xiàn) = ,等價(jià)語(yǔ)義8. totally_ordered :全序概念,組合了 equality_comparable 和 less_than_comparable9. additive :可加減概念,組合了 addable 和 subtractable10. multiplicative:可乘除概念,組合了multipliable和 diviable11. arithmetic:算術(shù)運(yùn)算概念,組合了additive和 multiplicative12. unit_stoppable:可步進(jìn)概念, 組合了 incrementable和 decrementable13. public derefer

25、enceable<T, P, (B)>:解引用操作符,要求提供operator*,可自動(dòng)實(shí)現(xiàn)operator->。 P 為 operator->返回類型,一般為 T*814. public indexable<T, I, R, (B)>:下標(biāo)操作符, I 為下標(biāo)類型,要求能夠與類型 T 做加法操作,通常為int ; R 是 operator的返回值類型,通常是一個(gè)類型的引用。要求提供operator+(T, I),將自動(dòng)實(shí)現(xiàn)operator1.如果只關(guān)心類的等價(jià)語(yǔ)義,那么就用equivalent,如果想要精確的比較兩個(gè)對(duì)象的值,就是用equality_com

26、prable。相等 equivalent基于 "=" 實(shí)現(xiàn),而equality_comprable基于 "<" 的 "!(x<y)&&!(x>y)"實(shí)現(xiàn)。2.3.應(yīng)該總對(duì)異常類是用虛繼承struct my_exception :virtual std:exception,/兼容 C+ 標(biāo)準(zhǔn)異常virtual boost:exception;typedef boost:error_info<struct tag_err_no, int> err_no;typedef boost:error_

27、info<struct tag_err_str, string> err_str;#include <boost/exception/all.hpp>try throw my_exception() << err_no(10); catch(my_exception& e)cout << *get_error_info<err_no>(e) << endl;cout << e.what() << endl;e << err_str("向異常追加信息,還可再次拋出&quo

28、t;);9cout << *get_error_info<err_str>(e) << endl;4. 從 exception 派生的異常定義非常簡(jiǎn)單,沒(méi)有實(shí)現(xiàn)代碼,可以很容易建立起一個(gè)適合自己程序的、 驚喜完整的異常類體系。 只要都是用虛繼承, 類體系可以任意復(fù)雜。5. boost 庫(kù)預(yù)定義的異常類型:typedef error_info<struct errinfo_api_function_, char const*> errinfo_api_function;typedef error_info<struct errinfo_at_

29、line_, int> errinfo_at_line; typedef error_info<struct errinfo_file_handle_, weak_ptr<FILE>> errinfo_file_handle;typedef error_info<struct errinfo_file_name_, std:string> errinfo_file_name;typedef error_info<struct errinfo_file_open_mode_, std:string> errinfo_file_open_mod

30、e;typedef error_info<struct errinfo_type_info_name_, std:string> error_info_type_info_name;typedef error_info<struct throw_function_, char const*> throw_function;typedef error_info<struct throw_file_, char const*> throw_file;typedef error_info<struct throw_line_, ine> throw_l

31、ine;6.enable_error_info<T>(T& e),可以將已將存在的任意類型包裝為boost異常類型107.throw_exception(任意異常類型 ),可以自動(dòng)將任意異常類型包裝為boost異常,還能保證線程安全8. diagnostic_information(e)可以得到任意 boost 異常的字符串內(nèi)容描述; 在 catch塊中調(diào)用 current_exception_diagnostic_information(),則不用傳參數(shù)e。(何必呢,為少寫(xiě)一兩個(gè)字母反而要記住一個(gè)更長(zhǎng)的名字)9. catch 塊內(nèi)的異常轉(zhuǎn)型用 current_except

32、ion_cast<T>()10. catch塊內(nèi)調(diào) current_exception()得到當(dāng)前異常指針的exception_ptr是線程安全的, rethrow_exception可以重新拋出異常11. UUID, Universally Unique Identifier, 128bit(16 Byte),不需要中央認(rèn)證機(jī)構(gòu)就可以創(chuàng)建全球唯一的標(biāo)識(shí)符。別名GUID12. 不是所有的警告都可以忽略的,有的警告預(yù)示著可能潛在的錯(cuò)誤13. BOOST_BINARY(111 00 1),可以實(shí)現(xiàn)編譯器的二進(jìn)制定義,但不能超過(guò)8bit第 5 章字符串與文本處理1.lexical_cas

33、t<T>(X),可以實(shí)現(xiàn)字符串和數(shù)值類型之間的轉(zhuǎn)換,但不支持高級(jí)格式控制。轉(zhuǎn)換失敗將拋出bad_lexical_cast異常。 lexical_cast底層用 C+ 流實(shí)現(xiàn),要求目標(biāo)類型支持operator<<、 operator>>、無(wú)參構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)2. cout << format("%s:%d+%d=%dn") %"sum" %1 %2 %(1+2); /sum:1+2=3format fmt("(%1% + %2% ) *%2% = %3%n");fmt %2 %5;f

34、mt %(2+5)*5);cout << fmt.str() ; / (2 + 5) * 5 = 35113.format在提供的參數(shù)過(guò)多或過(guò)少的情況下operator<<或 str() 都會(huì)拋出異常4. format 完全支持 printf 的格式化選項(xiàng)方式,同時(shí)還增加了新的方式:1. %|spec|% :與 printf 格式選項(xiàng)功能相同,但兩邊增加了豎線分隔,可以更好的區(qū)分格式化選項(xiàng)有普通字符2. %N%:標(biāo)記第 N 個(gè)參數(shù),相當(dāng)于占位符,不帶任何其他的格式化選項(xiàng)1.format因?yàn)樽隽撕芏喟踩珯z查工作,會(huì)比printf 慢至少 2-5倍2.format相關(guān)的高級(jí)

35、功能:1.basic_format&bind_arg (int argN, const T& val)把格式化字符串第argN 位置的輸入?yún)?shù)固定為val ,即使調(diào)用 clear() 也保持不變,除非調(diào)用clear_bind() 或 clear_binds()2.basic_format&clear_bind(int argN)取消格式化字符串第 argN 位置的參數(shù)綁定3.basic_format&clear_binds()4.basic_format& modify_item(int itemN, T manipulator)設(shè)置格式化字符串第 it

36、emN位置的格式化選項(xiàng),manipulator是一個(gè)boost:io:group()返回的對(duì)象5.boost:io:group(T1 a1, ., Var const& var)是一個(gè)最多支持 10 個(gè)參數(shù)的模板函數(shù),可以設(shè)置IO 流操縱器以指定格式或輸入?yún)?shù)值1. string_algo 庫(kù)包括:1. to_upper, to_lower, starts_with, ends_with, contains, equals, lexicographical_compare122.all( 檢測(cè)字符串中的所有元素是否滿足給定的判斷式)3. 仿函數(shù) is_equal, is_less, i

37、s_not_greater4.is_space, is_alnum, is_alpha, is_cntrl, is_digit(十進(jìn)制數(shù)字 ), is_graph,is_lower, is_print, is_punct(是否是標(biāo)點(diǎn)符號(hào) ), is_upper, is_xdigit(字符是否為十六進(jìn)制數(shù)字 ), is_any_of(字符是否是參數(shù)字符序列中的任意數(shù)字),if_from_range( 字符是否位于指定的區(qū)間c1,c2內(nèi) )5.trim_left、 trim_right、trim6.find_first、 find_last、 find_nth、 find_head 、 find_

38、tail7.replace/erase_first、 replace/erase_last、 replace/erase_nth、replace/erase_all 、 replace/erase_head、 replace/erase_tail8.find_all、 split 、 find_iterator、 split_iterator、 join1.tokenizer類似 string_algo:split,為更專業(yè)的token劃分工具。 tokenizer庫(kù)提供預(yù)定義好的四個(gè)分詞對(duì)象:1.char_delimiter_separator:使用標(biāo)點(diǎn)符號(hào)分詞,是默認(rèn)的分詞函數(shù)對(duì)象。已被聲

39、明廢棄2.char_separator:支持一個(gè)字符集合作為分隔符,默認(rèn)行為與char_delimiter_separator類似3.escaped_list_separator:用于 CSV 格式的分詞4.offset_separator:使用偏移量來(lái)分詞2. xpressive ,類似 boost.regex 的正則表達(dá)式解析器,同時(shí)還是一個(gè)類似于boost.spirit的語(yǔ)法分析器,并且將這兩種完全不相交的文本處理方式完美的融合在了一起3.xpressive使用 regex_token_iterator<>提供了強(qiáng)大的分詞迭代器13第 6 章正確性測(cè)試1.測(cè)試對(duì)于軟件開(kāi)發(fā)是非

40、常重要的,程序員 尤其是 C+ 程序員更應(yīng)該認(rèn)識(shí)到這一點(diǎn)2. BOOST_ASSERT 宏類似于 assert 宏,提供運(yùn)行時(shí)斷言,但功能有所增強(qiáng)??梢酝ㄟ^(guò) BOOST_DISABLE_ASSERTS來(lái)關(guān)閉。當(dāng)定義BOOST_ENABLE_ASSERT_HANDLER后,斷言觸發(fā)時(shí)將會(huì)調(diào)用boost:assertion_failed回調(diào)3.BOOST_VERIFY類似 BOOST_ASSERT,但斷言表達(dá)式一定會(huì)被求值,Release下仍然會(huì)失效(放棄BOOST_VERIFY)4.BOOST_STATIC_ASSERT,編譯時(shí)斷言??梢猿霈F(xiàn)在程序的任何位置,而不一定只在函數(shù)域內(nèi)5. 測(cè)試用例是

41、一個(gè)包含多個(gè)測(cè)試斷言的函數(shù),它是可以被獨(dú)立執(zhí)行測(cè)試的最小單元,各個(gè)測(cè)試用例之間是無(wú)關(guān)的,發(fā)生的錯(cuò)誤不會(huì)影響到其他測(cè)試用例第 7 章 容器與數(shù)據(jù)結(jié)構(gòu)1. array 是的 C 原生數(shù)組的 STL 接口包裝2.std:vector<bool>是 vector對(duì) bool 的特化,內(nèi)部保存的實(shí)際為bit ,支持動(dòng)態(tài)長(zhǎng)度。 std:bitset大小固定,但支持更多的位運(yùn)算3.boost.dynamic_bitset類似 std:vector<bool>可以動(dòng)態(tài)長(zhǎng)度, 同時(shí)提供了豐富的位運(yùn)算。 dynamic_bitset還支持集合相關(guān)操作144.哈希容器: boost:unor

42、dered_map、 boost:unordered_set、boost:unordered_multimap、boost:unordered_multiset5. boost:bimap ,雙向映射容器,提供 left 、 right 兩個(gè)試圖。支持的集合類型有:set_of 、 multiset_of、unordered_set_of、 unordered_multiset_of、 list_of 、vector_of、 unconstrained_set_of6. bimap 的左右視圖還可以通過(guò)標(biāo)簽訪問(wèn):bimap<tagged<int, struct id>, ta

43、gged<string, struct name>> bm;bm.by<id>().insert(make_pair(1, "C+"); /相當(dāng)于使用左視圖bm.by<name>().insert(make_pair("java", 2); /相當(dāng)于使用右視圖7.circular_buffer<T>為大小固定的循環(huán)緩沖區(qū),circular_buffer_space_optimized<T>類似 circular_buffer<T>但只在確實(shí)需要時(shí)才分配內(nèi)存,并且當(dāng)容器內(nèi)元素減少

44、時(shí)自動(dòng)釋放內(nèi)存8.tuple是固定數(shù)目非同質(zhì)元素容器。tuple是 std:pair的泛化, 可以從函數(shù)返回任意數(shù)量的值,也可以代替struct組合數(shù)據(jù)9.和 std:make_pair對(duì)應(yīng),也有個(gè)make_tuple用來(lái)簡(jiǎn)化 tuple的創(chuàng)建10. tie() 可以生成一個(gè)元素類型全是引用的tuple ,相當(dāng)于make_tuple(ref(a),ref(b), .),可以用于左值,通常用來(lái)接收返回tuple或 pair函數(shù)的返回值,可以看成是對(duì)tuple的解包11. element<N, T>:type可以給出T 中第 N 個(gè)元素的類型, length<T>:valu

45、e可以給出 T 的元素?cái)?shù)量12. any 能夠容納任意類型,可以用any_cast<T>(a)類型安全的取出any中的值(讓人聯(lián)想到 Ogre:Any)1513. any 可以持有原始指針,但這樣的用法很不安全,會(huì)導(dǎo)致內(nèi)存泄露。應(yīng)該使用智能指針包裝原始指針,這樣在any析構(gòu)時(shí)智能指針會(huì)自動(dòng)的調(diào)用delete ,從而安全的釋放資源14. 如果希望一種數(shù)據(jù)結(jié)構(gòu)具有 tuple 那樣的容納任意類型的能力,又可以在運(yùn)行時(shí)動(dòng)態(tài)變化大小,那么就可以用 any 作為元素類型搭配容器15. variant是對(duì) C/C+ 中 union概念的增強(qiáng)和擴(kuò)展。varinat是有界類型,元素類型范圍由用戶指

46、定,any是無(wú)界類型,可以容納任意類型16. multi_array<int, 3>,相當(dāng)于 int maXYZ的多維數(shù)組。 multi_array沒(méi)有異常機(jī)制來(lái)處理錯(cuò)誤,保證數(shù)組范圍不越界是庫(kù)用戶自己的責(zé)任17. property_tree是一個(gè)保存了多個(gè)屬性值的樹(shù)形數(shù)據(jù)結(jié)構(gòu),可以用類似路徑的簡(jiǎn)單方式訪問(wèn)任意節(jié)點(diǎn)的樹(shù)形,而且每個(gè)節(jié)點(diǎn)都可以用類似STL 的風(fēng)格遍歷子節(jié)點(diǎn)。property_tree特別適合于應(yīng)用程序的配置數(shù)據(jù)處理,可以解析xml 、 ini 、json和 info四種格式的文本數(shù)據(jù),使用它能減輕自己開(kāi)發(fā)配置管理的工作。第8章算法1.boost foreach庫(kù)提供

47、BOOST_FOREACH和 BOOST_REVERSE_FOREACH來(lái)實(shí)現(xiàn)對(duì)容器的正向和反向遍歷2. minmax(a, b) 可在一次處理中同時(shí)獲得最大最小值,執(zhí)行效率上有很大提高(有提前優(yōu)化的感覺(jué)了)3. minmax_element算法族可以得到迭代器區(qū)間內(nèi)的最大最小值第 9 章數(shù)學(xué)與數(shù)字161. 從純數(shù)學(xué)的角度看,程序也不過(guò)是一個(gè)非常大的整數(shù)而已2.integer_traits : public std:numeric_limits,提供各種整數(shù)類型的編譯期最大最小值3. <boost/cstdint.hpp>基于 C99 標(biāo)準(zhǔn)中的 <stdint.h> ,

48、定義了各種標(biāo)準(zhǔn)的整數(shù)4. <boost/integer.hpp>與 <boost/cstdint.hpp>功能類似,用模板類而不是typedef提供各種整數(shù)類型定義5.boost.rational表示有理數(shù)(分?jǐn)?shù)),rational_cast<R>可以將有理數(shù)轉(zhuǎn)換為普通數(shù)字6. 最大公約數(shù) gcd() ;最小公倍數(shù) lcm()7.crc_optimal以字節(jié)為單位的快速CRC 計(jì)算,實(shí)際常用的是crc_32_type的預(yù)定義算法8. boost random庫(kù)提供了 26 個(gè)偽隨機(jī)數(shù)發(fā)生器9. random 庫(kù)提供的隨機(jī)數(shù)分布器:1. uniform_sma

49、llint:在小整數(shù)域內(nèi)的均勻分布2. uniform_int :在整數(shù)域上的均勻分布3. uniform_01 :在區(qū)間 0,1 上的實(shí)數(shù)連續(xù)均勻分布4.uniform_real :在區(qū)間 min,max上的實(shí)數(shù)連續(xù)均勻分布5.bernoulli_distribution:伯努利分布6.binomial_distribution:二項(xiàng)分布7.cauchy_distribution:柯西(洛倫茲)分布8.gamma_distribution:伽馬分布9.poisson_distribution:泊松分布10. geometric_distribution:幾何分布1711. triangle_

50、distribution:三角分布12. exponential_distribution:指數(shù)分布13. normal_distribution:正態(tài)分布14. lognormal_distribution:對(duì)數(shù)正態(tài)分布15. uniform_on_sphere:球面均勻分布1.variate_generator<Engine, Distribution>變量發(fā)生器,用于組合隨機(jī)數(shù)發(fā)生器和分布器2. 真隨機(jī)數(shù)無(wú)法用純軟件產(chǎn)生,因?yàn)橛?jì)算機(jī)本身是個(gè)確定的有限狀態(tài)自動(dòng)機(jī)第 10 章 操作系統(tǒng)相關(guān)1. io_state_savers 庫(kù)可以簡(jiǎn)化恢復(fù)流狀態(tài)的工作, 它能夠保存流的當(dāng)前狀態(tài), 自動(dòng)恢復(fù)流的狀態(tài)或者由程序員控制恢復(fù)的時(shí)機(jī)1. 基本的標(biāo)準(zhǔn)屬性保存器: ios_flags_saver 、 ios_width_saver2. 增強(qiáng)的標(biāo)準(zhǔn)屬性保存器: ios_iostate_saver 、 ios_rdbuf_saver3. 自定義的屬性保存器: ios_iword_saver 、 ios_pword_saver4.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論