数据结构,容器,迭代器,以及算法Boost.Any
Any库支持对任意类型的值进行类型安全的存取。当需要使用可变类型(variant type)的时候,有三种可能的解决方案:
无差别的(Indiscriminate)类型,比如void*. 这种解决方案几乎永远不可能达到类型安全,要尽可能地避免使用它。支持对一组类型进行存取的可变类型。可以进行转换的类型,比如在字符串类型和数字类型之间进行转换。Any实现的是第二种解决方案,基于值的(value-based)可变类型,而且支持任意多的类型。这个库经常被用于在标准库容器中存储异构类型(heterogeneous types)。更多信息请参考“Library 6: Any.”
Any的作者是Kevlin Henney。
Boost.Array
这个库是对C风格的数组的一个包装。可以把它们作为标准库容器的函数和类型定义(typedefs)的参数。从效果上看,这使得我们可以像对待标准库容器那样对待常规数组。这么做之所以有用是因为它在不影响效率的情况下增加了安全性,而且可以用统一的语法来处理标准库容器和常规数组。第二个理由意味着我们可以把常规数组应用于绝大多数需要对容器类型进行操作的函数。通常情况下,当运行效率要求最好使用常规数组而不是std:;vector的时候,考虑使用Array类。
Array的作者是Nicolai Josuttis。他借用Matt Austern和Bjarne Stroustrup的思想,构建了这个库。
Boost.Compressed_pair
这个库由一个单独的参数化类型,compresed_pair组成,它非常类似于标准库的std::pair。与std::pair的不同之处在于,boost::compressed_pair会对模板参数进行判断,看看它们是否为空,如果有空参数,就使用针对空参数的优化方法对pair的大小(size)进行压缩。
当pair的模板参数类型可能为空的时候,使用boost.compressed_pair来对pair进行存储。
Compressed_pair的作者是Steve Cleary,Beman Dawes,Howard Hinnant,以及John Maddock。
Boost.Dynamic_bitset
Dynamic_bitset库很大程度上类似于std::bitset,不同之处在于std::bistset把位数(也就是容器的大小)作为参数,而boost::dynamic_bitset支持运行时刻对容器大小进行调整。尽管dynamic_bitset支持与std::bitset相同的接口,但是它增加了一些针对运行时刻功能的函数以及std::bitset所没有的函数。通常情况下,当bitset的大小在编译时刻不能完全确定或者程序执行过程中可能会改变的时候,使用这个库作为std::bitset的替代。
Dynamic_bitset的作者是Jeremy Siek和Chuck Allison。
Boost.Graph
Graph是个处理图(graph)结构的库,它的设计在很大程度上受到STL的影响。它是通用以及高度可配置的,包括一些不同的数据结构:邻接表(adjacency lists),邻接矩阵(adjacency matrices),边线表(edge lists)。Graph库还提供了许多图算法,比如Dijsktra最短路径(Dijsktra's shortest path),Kruskal最小生成树(Kruskal's minimum spanning tree),拓扑排序等等,还有许多。
Graph的作者是Jeremy Siek, Lie-Quan Lee以及Andrew Lumsdaine。
Boost.Iterator
这个库为创建新的迭代器类型提供了一个框架,此外,它还提供了一些C++标准之外的有用的迭代器适配器。创建与标准兼容的迭代器类型通常是一件困难并且乏味的工作。Iterator库通过自动完成大多数细节部分的东西(比如提供标准所要求的typedefs)简化了上述工作。Iterator还使得适配一个现有的迭代器类型并且赋予它新的行为成为可能。比如,间接的迭代器适配器可以实施一个额外的去引用(dereferencing)操作,使得我们可以这么对待元素是指向某种类型的指针(或者智能指针)的容器,就好像容器所包含的元素就是那种类型的对象实体。
Iterator的作者是Jeremy Siek,David Abrahams,以及Thomas Witt。
Boost.MultiArray
MultiArray提供了一个多维容器,它在很大程度上类似于标准库容器而且相对于向量的向量(vectors of vectors)更加高效和直接。容器的维数是在声明的时候指定的,但是也支持切分和针对不同视图的投影,以及运行时刻的维数改变。
MultiArray的作者是。
Boost.Multi-index
Multi-index针对底层容器提供多个索引。也就是说,针对同一个底层容器你可以有不同的排序规则以及不同的存取语义。
当std::set和std::map不够用的时候可以使用Boost.Multi-index,通常这是为了高效的元素检索而需要维护多个索引情况。
Multi-index的作者是Joaquín M Lopez Muioz.
Boost.Range
这个库是一组针对ranges的概念和实用程序。直接使用ranges,而不是用代表ranges的一对迭代器来限定算法,这么做大大简化了算法的使用并且提高了用户代码的抽象级别。
Range的作者是Thorsten Ottosen。
Boost.Tuple
标准C++(通过使用类模板std::pair)已经包括了pairs,但是当前没有对n层垫片(n-tuples)的支持。Enter Tuple。与使用结构(structs)或者类定义n层垫片不同,类模板垫片直接支持把垫片定义为函数的返回类型或者参数,而且它还提供了存取垫片元素的泛型方法。关于这个库的更多详细信息请参见“Library 8: Tuple 8”。Tuple已经被即将到来的标准库技术报告所采纳。
Tuple的作者是Jaakko Jarvi。
Boost.Variant
Variant库包括一个通用的无差别的联合类(discriminated union class) ,这个类用于存储和操作来自于一组异构类型的对象。这个库的特性之一是,支持类型安全的访问,这消除了针对可变数据类型的类型转换代码的常见问题。
Variant的作者是Eric Friedman和Itay Maman。