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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

boost一些常用库(数据结构,迭代器,算法及字符串) 简单介绍

發布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boost一些常用库(数据结构,迭代器,算法及字符串) 简单介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://blog.csdn.net/jinzhuojun/article/details/51923337

?

C++強大的重要原因之一就是它的庫。而boost就是這樣一個包羅萬象的C++庫,同時它也是C++標準庫的官方后備軍。不僅實用,功能全,而且靈活,高效,質量高。無論是學習或項目,都是有力的工具。下面羅列了容器、算法等幾個重要類別下的主要子庫。其中的一些已經是目前比較主流的C++11標準,有些在進入標準庫的過程中,未來可能成為標準庫的一部分。有些雖然進了標準庫,但boost中的實現提供了額外的特性。總之,在boost中可以看到C++標準發展的一些趨勢。

?

數據結構,容器和迭代器

Any(Not C++11)

通過type erasure技術實現的可以存放任意類型的類型。類型boost::any的變量可以通過boost::any_cast<type>來轉化成相應類型,如果類型與之前不匹配會拋出boost::bad_any_cast異常。boost::any大量使用內存動態分配,RTTI和虛函數,對性能可能會有影響。

?

Variant(Not C++11)

C++03 unions只能放POD,C++11可以放類似于std::string的對象,但需要自己管理構建和銷毀,因此需要顯示記錄union里放的是什么,這樣用起來就很累。為了克服這個缺點,boost::variant它維護了數組,編譯期決定該數組長度。在賦值或是構造時,這些對象被in-place方式銷毀,然后通過placement new創建。同樣是基于type erasure技術,它不需要RTTI,效率上比Any快。配合boost::apply_visitor()可以實現visitor模式。

?

Array(C++ 11)

元素為同樣類型的數組的模板類,包含個數信息。與vector等容器相比,它的元素個數動態不能變。它擁有和STL容器類似的成員函數。提供這些優點的同時,性能又和C數組相當。

?

Tuple(C++11)

與std::pair類似,只是它可以表示多元組。與array不同的是其中的元素類型可以不同。用make_tuple()創建。用boost::tie()可以創建元組的nonconst reference,這樣可以作為lvalue用于賦值等。tuple主要是為了簡化template programming。如果一個結構體只用一兩次,就不用定義成struct了。

?

Unordered(C++11)

提供了unordered_map, unordered_set等基于hash表的容器實現,對于要經常查找的場合比較適用。

?

Bitmap(Not C++11)

不是位圖庫,是用于value同時也是key的容器。大部分的用于索引的容器都是<key, value>的結構,但有時希望元素中的兩個值互為索引。當然你可以選擇用兩個容器替代它,但一般來說會用更多內存。

?

MultiIndex(Not C++11)

用于可以有多個index的容器,類似于數據庫中的表。可以指定每個index的屬性,比如unique,sorted等。

?

Container(Not C++11)

提供一些五花八門的容器,比如stable_vector, slist(C++11有類似的forward_list), static_vector, small_vector, flat_[multi]map/set(基于vector實現的set和map)等。

?

ICL(Not C++11)

提供了兩種基于interval的容器:interval_set和interval_map。它們可以方便地存放interval元素并對其進行相應操作。

?

Circular Buffer(Not C++11)

通用的循環緩沖實現。有空間優化版本(Lazily分配內存)。

?

Dynamic Bitset(C++11)

用于表示一系列的bit位。重載operator[]使之可以方便地訪問其中某一bit,另外還有如&, |, <<等各種bitwise operator提供。C++11中的std::bitset和它很類似。

?

Intrusive(Not C++11)

Intrusive的數據結構在c中被大量使用。而相較而言,C++中,比如STL中的容器大多不是intrusive的,即其中的元素不用包含用于容器管理的數據。該庫提供了基于intrusive的如list, set, splaytree, treap, rbtree, hashtable, avltree等數據結構。

?

MultiArray(Not C++11)

用于多維數組,即矩陣的存儲和處理。比C++中類似std::array<std::array<int, n>, m>或std::vector<std::vector<>>的方式更方便高效。

?

Property Map(Not C++11)

最初來源于Boost Graph Library中,需要property map接口來訪問圖中頂點和邊的相關數據。后來發展成通用庫用于描述模板參數需求的工具。本質上它是基于下層數據結構(如std::map)的用于映射key object到value object的一系列concept。

?

Property Tree(Not C++11)

提供了樹型的數據存儲結構,其中的元素可以通過path來查找,有點像trie樹。尤其適合configuration數據的處理。還可以方便得從XML, JSON文件中解析和生成樹型結構。

?

Heap(Not C++11)

priority queue的實現。與STL中的std::priority_queue相比,它提供了更多功能及更多特性(如可遍歷,可合并,可比較,可變,穩定等 )。

?

PointerContainer(Not C++11)

包含了ptr_array, ptr_vector, ptr_set, ptr_multimap等,用于將堆分配的對象指針放在容器內。用它可以免除自己定義compare函數,也可以少加reference操作,使代碼更簡潔。

?

Range(Not C++11)

提供了用兩個iterator表示數據結構子部分的方法。比如表示子字符串,這樣可以有效避免拷貝。同時提供了比如copy, merge, remove, rotate, reverse, replace, transform等通用算法。

?

?

算法?

Geometry(Not C++11)

該庫主要用于解決幾何問題。算法涉及segment, multi_point, centroid, convex hull, bounding box等,提供了R-Tree等數據結構的實現。在游戲開發,圖形學,機器人等眾多領域都能用到。

?

Algorithm(Partially C++11)

提供了all_of, any_of, partition_copy,KMP,min-max等基本通用算法。其中很多已是C++11標準。

?

Polygon(Not C++11)

提供關于平面多邊形幾何數據的算法 。比如多邊形集合的各種集合運算, connectivity extraction,? sweep line algorithm(for Voronoi diagrams)等算法。這些算法在GIS, CAD,VLSI等領域起到很大作用。

?

Sort(Not C++11)

提供了高性能排序的一種通用實現spreadsort,并對幾種常見數據類型作了specialization。它是一種采用了radix和基于比較排序的混合算法,比標準庫里的std::sort()在大多數情況下更高效(元素個數多或者大,本來有序,比較函數慢等情況)。

?

Graph(Not C++11)

實現了一些常用的圖算法,比如拓撲排序,BFS, DFS, Dijkstra shortest path等等。配合Graphviz等工具還可以將數據圖形化。

?

?

?

字符串處理

LexicalCast(Not C++11) & NumericConversion(Not C++11) & Convert (Not C++11)

boost::lexical_cast用于字符串到整數類型,或者相反方向的轉換。當失敗時拋boost::bad_lexical_cast異常。與同類方法相比,它比C中的strtol有更少的限制,比scanf更安全易用,比C++中的stringstream更簡潔。 配合std::locale還可以根據localization進行轉換。

std::numeric_cast用于數字到數字的轉換,用于替換static_cast,這樣如果轉換失敗會拋異常(比如overflow)。

Convert在LexcalCast的概念上擴展了它的功能,比如format和locale支持,更好的錯誤檢測等。

?

StringAlgorithm(Not C++11)

提供了一系列字符串相關的算法 。比如case insensitive comparison,search/replace,split,trim等功能。

?

Spirit(Not C++11)

它可以用于寫文本的parser。相比bison等專業的工具,它更輕量級。語法類似于EBNF。

?

RegEx(C++11)

正則表達式處理。用boost::regex可以動態生成對象進行正則表達式的解析和編譯,也可以做基于正則表達式的替換和查找。

?

Tokenizer(Not C++11)

更靈活易用的方法將字符串分割成token。它將tokenizer的policy抽象成TokenizerFunction,并且提供幾種model分別基于char, excaped list和offset。它比C中的strtok提供更細致的控制。

?

Locale(Not C++11)

提供跨平臺的本地化支持。

?

Xpressive(Not C++11)

正則表達式模板庫。支持運行時或編譯時的正則表達式處理,還支持遞歸定義。

總結

以上是生活随笔為你收集整理的boost一些常用库(数据结构,迭代器,算法及字符串) 简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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