Boost C++ 库

...世界上最受推崇和设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码标准

PrevUpHomeNext

第 8 章。Boost.Container

Ion Gaztanaga

根据 Boost 软件许可协议 1.0 版发布。(请参阅随附的 LICENSE_1_0.txt 文件或复制 https://boost.ac.cn/LICENSE_1_0.txt

目录

简介
构建 Boost.Container
测试的编译器
主要特性
高效插入
不完整类型的容器
SCARY 迭代器
其他特性
Boost.Container 和 C++ 异常
非标准容器
stable_vector
flat_(multi)map/set 关联容器
devector
slist
static_vector
small_vector
扩展功能:基本扩展
类向量容器的默认初始化
关联容器的有序范围插入(ordered_unique_rangeordered_range
(s)list 的常量时间范围拼接
扩展功能:可配置容器
可配置的基于树的关联有序容器
可配置的向量
可配置的静态向量
可配置的小向量
可配置的双端队列
可配置的 devector
扩展功能:扩展分配器
C++11/C++14/C++17 一致性
移动和就地构造
有状态的分配器
作用域分配器
关联容器中的插入提示,以及保留具有等效键的元素的插入顺序
初始化列表
空前向迭代器
多态内存资源
forward_list<T>
vectorstd::vector 的异常保证
通过 const 引用获取的可更改参数
vector<bool> 特化
使用 std::memset 的非标准值初始化
已知问题
C++03 编译器中的移动模拟限制
使用 Boost.Container 的历史和原因
Boost.Container 的历史
为什么选择 Boost.Container?
索引
类索引
类型定义索引
函数索引
Boost.Container 头部引用
头文件 <boost/container/adaptive_pool.hpp>
头文件 <boost/container/allocator.hpp>
头文件 <boost/container/allocator_traits.hpp>
头文件 <boost/container/container_fwd.hpp>
头文件 <boost/container/deque.hpp>
头文件 <boost/container/pmr/deque.hpp>
头文件 <boost/container/devector.hpp>
头文件 <boost/container/pmr/devector.hpp>
头文件 <boost/container/flat_map.hpp>
头文件 <boost/container/pmr/flat_map.hpp>
头文件 <boost/container/flat_set.hpp>
头文件 <boost/container/pmr/flat_set.hpp>
头文件 <boost/container/list.hpp>
头文件 <boost/container/pmr/list.hpp>
头文件 <boost/container/map.hpp>
头文件 <boost/container/pmr/map.hpp>
头文件 <boost/container/new_allocator.hpp>
头文件 <boost/container/node_allocator.hpp>
头文件 <boost/container/node_handle.hpp>
头文件 <boost/container/options.hpp>
头文件 <boost/container/pmr/global_resource.hpp>
头文件 <boost/container/pmr/memory_resource.hpp>
头文件 <boost/container/pmr/monotonic_buffer_resource.hpp>
头文件 <boost/container/pmr/polymorphic_allocator.hpp>
头文件 <boost/container/pmr/pool_options.hpp>
头文件 <boost/container/pmr/resource_adaptor.hpp>
头文件 <boost/container/pmr/synchronized_pool_resource.hpp>
头文件 <boost/container/pmr/unsynchronized_pool_resource.hpp>
头文件 <boost/container/scoped_allocator.hpp>
头文件 <boost/container/scoped_allocator_fwd.hpp>
头文件 <boost/container/pmr/set.hpp>
头文件 <boost/container/set.hpp>
头文件 <boost/container/pmr/slist.hpp>
头文件 <boost/container/slist.hpp>
头文件 <boost/container/pmr/small_vector.hpp>
头文件 <boost/container/small_vector.hpp>
头文件 <boost/container/pmr/stable_vector.hpp>
头文件 <boost/container/stable_vector.hpp>
头文件 <boost/container/static_vector.hpp>
头文件 <boost/container/pmr/string.hpp>
头文件 <boost/container/string.hpp>
头文件 <boost/container/throw_exception.hpp>
头文件 <boost/container/uses_allocator.hpp>
头文件 <boost/container/uses_allocator_fwd.hpp>
头文件 <boost/container/pmr/vector.hpp>
头文件 <boost/container/vector.hpp>
致谢、注释和链接
发行说明
Boost 1.87 发行版
Boost 1.86 发行版
Boost 1.85 发行版
Boost 1.83 发行版
Boost 1.82 发行版
Boost 1.81 发行版
Boost 1.80 发行版
Boost 1.79 发行版
Boost 1.78 发行版
Boost 1.77 发行版
Boost 1.76 发行版
Boost 1.75 发行版
Boost 1.74 发行版
Boost 1.72 发行版
Boost 1.71 发行版
Boost 1.70 发行版
Boost 1.69 发行版
Boost 1.68 发行版
Boost 1.67 发行版
Boost 1.66 发行版
Boost 1.65 发行版
Boost 1.64 发行版
Boost 1.63 发行版
Boost 1.62 发行版
Boost 1.61 发行版
Boost 1.60 发行版
Boost 1.59 发行版
Boost 1.58 发行版
Boost 1.57 发行版
Boost 1.56 发行版
Boost 1.55 发行版
Boost 1.54 发行版
Boost 1.53 发行版
Boost 1.52 发行版
Boost 1.51 发行版
Boost 1.50 发行版
Boost 1.49 发行版
Boost 1.48 发行版

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

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

  • 实现了就地构造和移动语义,包括对 C++11 之前的编译器的模拟。
  • 多态分配器和内存资源,包括对 C++17 之前的编译器的实现和模拟
  • 新的高级特性(例如递归容器)和容器的配置选项 container.configurable_containers
  • 容器支持有状态分配器,并且与 Boost.Interprocess 兼容(它们可以安全地放置在共享内存中)。
  • 用户可以在所有平台上获得更统一的性能,包括 SCARY 迭代器
  • 该库提供了新的有用的容器
    • flat_mapflat_setflat_multimapflat_multiset:标准关联容器的直接替代品,但内存更友好且搜索速度更快。
    • stable_vector:std::list 和 std::vector 的混合容器:类似向量的随机访问迭代器和类似列表的迭代器在插入和删除操作中的稳定性。
    • static_vector:一个类似向量的容器,在内部嵌入(静态分配)所有需要的内存,直到最大容量。最大容量无法增加,并且在编译时指定。
    • small_vector:一个类似向量的容器,在内部嵌入(静态分配)最小的内存量,但是当容量必须增加时,会动态分配元素。此最小容量在编译时指定。
    • devector:是标准 vector 和 deque 容器的混合体。它在前端和后端都提供廉价的(摊销的常量时间)插入。
    • slist:经典的预标准单链表实现,提供常量时间 size()。请注意,C++11 forward_list 没有 size()

无需编译 Boost.Container,因为它是一个仅包含头文件的库,只需将你的 Boost 头文件目录包含在编译器包含路径中 除非你使用

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

Boost.Container 需要良好的 C++03 兼容性。一些已知有效的编译器是

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

PrevUpHomeNext