C++ boost 組件簡介:數據結構, 容器, 迭代器和算法

 

數據結構, 容器, 迭代器, 和算法

Boost.Any

Any庫支持類型安全地存儲和獲取任意類型的值。當你需要一個可變的類型時,有三種可能的解決方案:

  • 無限制的類型,如 void*. 這種方法不可能是類型安全的,應該象逃避災難一樣避免它。

  • 可變的類型,即支持多種類型的存儲和獲取的類型。

  • 支持轉換的類型,如字符串類型與整數類型之間的轉換。

Any實現了第二種方案,一個基於值的可變化的類型,無限可能的類型。這個庫通常用於把不同類型的東西存儲到標準庫的容器中。

Any 的作者是 Kevlin Henney.

Boost.Array

這個庫包裝了普通的C風格數組,給它們增加了一些來自於標準庫容器的函數和typedef 。其結果就是可以把普通的數組視爲標準庫的容器。這非常有用,因爲它增加了類型安全性而沒有降低效率,而且它使得標準庫容器和普通數組擁有統一的語法。後一點意味着可以把普通數組用於大多數的要求容器類來操作的函數。當要求軟件要達到普通數組的性能時,可以用Array來替代std::vector.

Array 的作者是 Nicolai Josuttis, 它在Matt Austern 和 Bjarne Stroustrup早期提出的思想之上建立了這個庫。

Boost.Compressed_pair

這個庫包括一個參數化的類型, compressed_pair, 它非常象標準庫中的 std::pair. 與std::pair不同之處在於, boost::compressed_pair 對模板參數進行評估,看其中有沒有空的參數,如果有,使用空類優化技術來壓縮pair的大小。

Boost.Compressed_pair 常用於存放一對對象,其中之一或兩個都可能是空的。

Compressed_pair 的作者是 Steve Cleary, Beman Dawes, Howard Hinnant, 和 John Maddock.

Boost.Dynamic_bitset

Dynamic_bitset庫非常象std::bitset, 除了std::bitset 是用參數來指定位數(即容器的大小), 而boost::dynamic_bitset 則支持在運行期指定大小。dynamic_bitset 支持與std::bitset一樣的接口,還增加了支持運行期特定功能的函數和一些std::bitset中沒有的功能。在bitset的大小無法在編譯期確定或在程序運行時可能變化的情況下,這個庫通常用於替換std::bitset

Dynamic_bitset 的作者是 Jeremy Siek 和 Chuck Allison.

Boost.Graph

Graph是一個處理圖結構的庫,它的設計受到STL的重要影響。它是泛型的,高度可配置,並且包括多個不同的數據結構:鄰接鏈表, 鄰接矩陣, 和邊列表。Graph還提供了大量的圖算法,如Dijsktra最短路徑算法,Kruskal最小生成樹算法,拓樸邏輯排序,等等。

Graph 的作者是 Jeremy Siek, Lie-Quan Lee, 和 Andrew Lumsdaine.

Boost.Iterator

這個庫提供一個創建新的迭代器類型的框架,還提供了許多有用的迭代器適配器,比C++標準中定義的更多。創建遵循標準的新迭代器類型是一件困難且乏味的工作。Iterator通過自動完成大多數細節,如提供所需的 typedef,簡化了這件工作。Iterator還可以改編已有的迭代器類型以賦於它新的行爲。例如,間接迭代器適配器增加了一個額外的解引用操作,可以把一個包含某種對象的指針(或智能指針)的容器變成象一個包含該對象的容器。

Iterator 的作者是 Jeremy Siek, David Abrahams, 和 Thomas Witt.

Boost.MultiArray

MultiArray提供了一個多維容器,它很象標準庫的容器,但比向量的向量更有效、更高效,更直接。容器的維數在聲明時指定,但它支持限制(slicing)和映身(projecting)不同的視圖(view),也可以在運行期改變維數。

MultiArray 的作者是 Ronald Garcia.

Boost.Multi-index

Multi-index爲底層的容器提供多個索引。這意味着一個底層的容器可以有不同的排序方法和不同的訪問語義。當std::setstd::map不夠用時,就可以用Boost.Multi-index,通常是在需要爲查找元素而維護多個索引時。

Multi-index 的作者是 Joaquín M López Muñoz.

Boost.Range

這個庫是一組關於範圍的概念和工具。比起在算法中使用一對迭代器來指定範圍,使用ranges更簡單,並提升了用戶代碼的抽象水平。

Range 的作者是 Thorsten Ottosen.

Boost.Tuple

在標準C++中有Pairs(類模板 std::pair), 但它不支持n-tuples。用Tuple.不象用structs 或 classes 來定義n-tuples, 這個類模板支持直接聲明和使用,如函數返回類型或參數,並提供一個泛型的方法來訪問tuple的元素。Tuple已經被即將發佈的Library Technical Report所接受。

Tuple 的作者是 Jaakko Järvi.

Boost.Variant

Variant庫包含一個不同於union的泛型類,用於在存儲和操作來自於不同類型的對象。這個庫的一個特點是支持類型安全的訪問,減少了不同數據類型的類型轉換代碼的共同問題。

Variant 的作者是 Eric Friedman 和 Itay Maman.



來源:Beyond the C++ Standard Library An Introduction to Boos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章