Boost C++ 库

……世界上最受推崇且设计最专业的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码规范

第 7 章. Boost.Container - Boost C++ 函数库
PrevUpHomeNext

第 7 章. Boost.Container

Ion Gaztanaga

根据 Boost 软件许可证版本 1.0 发布。(参见随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)

Boost.Container 库实现了多种知名容器,包括 STL 容器。该库的目标是提供标准容器中不存在的高级特性,或者为不符合最新 C++ 标准的编译器提供最新的标准草案特性。

简而言之,Boost.Container 提供了什么?

  • 能够访问许多最新的 C++ 标准特性,并在更换编译器时轻松迁移代码。
  • 一种可移植、高性能的实现,可在禁用异常支持的情况下编译,并能在容器需要发出异常错误信号时提供自定义的错误处理。
  • 用户可以在所有平台上获得更统一的性能,包括 SCARY 迭代器
  • 实用的多态分配器和内存资源,包括针对 C++17 之前编译器的实现和模拟。
  • 新的高级特性(例如递归容器)和 容器的配置选项
  • 容器支持有状态分配器,并且与 Boost.Interprocess 兼容(它们可以安全地放置在共享内存中),在使用 Boost.Interprocess 时相较于标准容器可提供更高的性能。
  • 您可以使用非常有用的非标准容器,如 [stable/static/small]_vector, flat_[multi]set/map, devectorsegtor
  • 如果您在多个平台上工作,您将获得可移植的行为,而无需依赖于每个平台上标准库实现的一致性。以下是一些示例:
  • 扩展功能:基于用户反馈在标准之外进行的扩展,以提高代码性能。
  • 配置选项:允许调整容器以满足用户需求。
  • 该库提供了新的实用容器:
    • flat_map, flat_set, flat_multimapflat_multiset:标准关联容器的直接替代品,但更节省内存且搜索速度更快。
    • stable_vector:一种 std::list 和 std::vector 的混合容器:具有像 vector 一样的随机访问迭代器,以及像 list 一样在插入和删除时的迭代器稳定性。
    • static_vector:一种向量类容器,在内部嵌入(静态分配)所有所需内存,直到最大容量。最大容量不可增加,且在编译时指定。
    • small_vector:一种向量类容器,在内部嵌入(静态分配)最少量的内存,但在需要增加容量时动态分配元素。该最小容量在编译时指定。
    • devector:标准 vector 和 deque 容器的混合体。它提供前端和后端的高效(摊销常数时间)插入。
    • segtor:一种序列容器,具有像 deque 一样的分段(基于块)存储,但只能在后端增长;支持常数时间的 push_back/pop_back 和随机访问。
    • slist:经典的预标准单向链表实现,提供常数时间的 size()。请注意,C++11 的 forward_list 没有 size()

无需编译 Boost.Container,因为它是一个仅头文件的库,只需将 Boost 头文件目录包含在编译器的包含路径中即可,除非您使用了以下内容

这些例外情况被实现为单独编译的库,因此在这些情况下,您必须将二进制文件安装在链接器可以找到的位置。如果您遵循了 Boost 入门指南 的说明,那么这就已经为您完成了。

Boost.Container 需要良好的 C++03 兼容性。已知可用的编译器包括:

  • Visual C++ >= 10.0
  • GCC >= 4.8

PrevUpHomeNext