Boost.Container 是一个漫长开发过程的产物,其起源可以追溯到 2004 年的实验性 Shmem 库,该库开创了在共享内存中使用标准容器的先河。Shmem 包含修改过的 SGI STL 容器代码,经过调整以支持非原始 allocator::pointer
类型和有状态的分配器。在审查后,Shmem 被接受为 Boost.Interprocess,该库继续对这些容器进行改进和优化。
2007 年,节点容器(map
、list
、slist
)中的容器代码被重写、重构和扩展,以构建内联容器库 Boost.Intrusive。 Boost.Interprocess 容器被重构以利用 Boost.Intrusive 容器,并最大限度地减少了代码重复。这两个库多年来一直获得支持和错误修复。它们引入了移动语义、原地插入以及尚未发布的 C++0x 标准的更多功能。
Boost.Interprocess 容器始终符合标准,并且这些容器以及像 stable_vector
和 flat_[multi]set/map
这样的新容器在 Boost.Interprocess 之外也得到了成功应用。随着容器足够成熟,可以拥有自己的库,因此很自然地将这些容器收集起来,构建 Boost.Container,一个面向更广泛受众的库。
市面上已经有很多高质量的标准库实现,为什么还要使用 Boost.Container 呢?原因有几个:
[stable/static/small]_vector
和 flat_[multi]set/map
。basic_string
进行的小字符串优化。