## 數 據結構, 容器, 迭代器, 和算法
### Boost.Any
Any庫支持類型安全地存儲和獲取任意類型的值。當你需要一個可變的類型時,有三種可能的解決方案:
* 無限制的類型,如 `void*`. 這種方法不可能是類型安全的,應該象逃避災難一樣避免它。
* 可變的類型,即支持多種類型的存儲和獲取的類型。
* 支持轉換的類型,如字符串類型與整數類型之間的轉換。
Any實現了第二種方案,一個基于值的可變化的類型,無限可能的類型。這個庫通常用于把不同類型的東西存儲到標準庫的容器中。更多的說明請見 "[Library 6](../Text/content.html#ch06): [Any](../Text/content.html#ch06)."
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::set` 和 `std::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`.`不象用`struct`s 或 `class`es 來定義n-tuples, 這個類模板支持直接聲明和使用,如函數返回類型或參數,并提供一個泛型的方法來訪問tuple的元素。關于這個庫的詳細信息,請見"[Library 8](../Text/content.html#ch08): [Tuple 8](../Text/content.html#ch08)"。Tuple已經被即將發布的Library Technical Report所接受。
Tuple 的作者是 Jaakko J?rvi.
### Boost.Variant
Variant庫包含一個不同于union的泛型類,用于在存儲和操作來自于不同類型的對象。這個庫的一個特點是支持類型安全的訪問,減少了不同數據類型的類型轉換代碼的共同問題。
Variant 的作者是 Eric Friedman 和 Itay Maman.
- 序
- 前言
- Acknowledgments
- 關于作者
- 本書的組織結構
- Boost的介紹
- 字符串及文本處理
- 數 據結構, 容器, 迭代器, 和算法
- 函數對象及高級編程
- 泛 型編程與模板元編程
- 數學及數字處理
- 輸入/輸出
- 雜項
- Part I: 通用庫
- Library 1. Smart_ptr
- Smart_ptr庫如何改進你的程序?
- 何時我們需要智能指針?
- Smart_ptr如何適應標準庫?
- scoped_ptr
- scoped_array
- shared_ptr
- shared_array
- intrusive_ptr
- weak_ptr
- Smart_ptr總結
- Library 2. Conversion
- Conversion 庫如何改進你的程序?
- polymorphic_cast
- polymorphic_downcast
- numeric_cast
- lexical_cast
- Conversion 總結
- Library 3. Utility
- Utility 庫如何改進你的程序?
- BOOST_STATIC_ASSERT
- checked_delete
- noncopyable
- addressof
- enable_if
- Utility 總結
- Library 4. Operators
- Operators庫如何改進你的程序?
- Operators
- 用法
- Operators 總結
- Library 5. Regex
- Regex庫如何改進你的程序?
- Regex 如何適用于標準庫?
- Regex
- 用法
- Regex 總結
- Part II: 容器及數據結構
- Library 6. Any
- Any 庫如何改進你的程序?
- Any 如何適用于標準庫?
- Any
- 用法
- Any 總結
- Library 7. Variant
- Variant 庫如何改進你的程序?
- Variant 如何適用于標準庫?
- Variant
- 用法
- Variant 總結
- Library 8. Tuple
- Tuple 庫如何改進你的程序?
- Tuple 庫如何適用于標準庫?
- Tuple
- 用法
- Tuple 總結
- Part III: 函數對象與高級編程
- Library 9. Bind
- Bind 庫如何改進你的程序?
- Bind 如何適用于標準庫?
- Bind
- 用法
- Bind 總結
- Library 10. Lambda
- Lambda 庫如何改進你的程序?
- Lambda 如何適用于標準庫?
- Lambda
- 用法
- Lambda 總結
- Library 11. Function
- Function 庫如何改進你的程序?
- Function 如何適用于標準庫?
- Function
- 用 法
- Function 總結
- Library 12. Signals
- Signals 庫如何改進你的程序?
- Signals 如何適用于標準庫?
- Signals
- 用法
- Signals 總結