## 数 据结构, 容器, 迭代器, 和算法
### 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 总结