Boost C++ 库

...世界上最受尊敬和精心设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

第 17 章。Boost.Intrusive

Olaf Krzikalla

Ion Gaztanaga

根据 Boost 软件许可证 1.0 版分发。(请参阅随附文件 LICENSE_1_0.txt 或访问 https://boost.ac.cn/LICENSE_1_0.txt)

目录

简介
介绍 Boost.Intrusive
构建 Boost.Intrusive
已测试的编译器
侵入式和非侵入式容器
侵入式和非侵入式容器之间的区别
Boost.Intrusive 容器的属性
如何使用 Boost.Intrusive
使用基类钩子
使用成员钩子
同时使用两种钩子
对象生命周期
何时使用?
概念总结
介绍 Boost.Intrusive 容器
安全钩子
安全模式的特性
配置安全模式断言
自动取消链接钩子
什么是自动取消链接钩子?
自动取消链接钩子示例
自动取消链接钩子和具有常量时间 size() 的容器
侵入式单向链表:slist
slist 钩子
slist 容器
示例
侵入式双向链表:list
list 钩子
list 容器
示例
侵入式关联容器:set、multiset、rbtree
set、multiset 和 rbtree 钩子
set、multiset 和 rbtree 容器
示例
半侵入式无序关联容器:unordered_set、unordered_multiset
unordered_set 和 unordered_multiset 性能注意事项
unordered_set 和 unordered_multiset 钩子
unordered_set 和 unordered_multiset 容器
示例
自定义桶特性
用于关联容器的类似 Map 和 Multimap 的接口
基于侵入式 AVL 树的关联容器:avl_set、avl_multiset 和 avltree
avl_set、avl_multiset 和 avltree 钩子
avl_set、avl_multiset 和 avltree 容器
示例
基于侵入式伸展树的关联容器:splay_set、splay_multiset 和 splay_tree
基于伸展树的容器的优点和缺点
splay_set、splay_multiset 和 splaytree 容器
示例
基于侵入式替罪羊树的关联容器:sg_set、sg_multiset 和 sgtree
sg_set、sg_multiset 和 sgtree 容器
示例
基于侵入式 Treap 树的关联容器:treap_set、treap_multiset 和 treap
treap_set、treap_multiset 和 treap 容器
基于 Treap 的侵入式容器的异常安全性
示例
二叉搜索树钩子:bs_set_base_hook 和 bs_set_member_hook
关联容器的高级查找和插入函数
高级查找
高级插入
位置插入
从 Boost.Intrusive 容器中擦除和处置值
克隆 Boost.Intrusive 容器
使用函数钩子
递归 Boost.Intrusive 容器
将智能指针与 Boost.Intrusive 容器一起使用
与 Boost.Intrusive 兼容的智能指针的要求
从值获取迭代器
任何钩子:适用于任何侵入式容器的单个钩子
概念解释
具有自定义 NodeTraits 的节点算法
侵入式单向链表算法
侵入式双向链表算法
侵入式红黑树算法
侵入式伸展树算法
侵入式 AVL 树算法
侵入式 Treap 算法
具有自定义 ValueTraits 的容器
ValueTraits 接口
自定义 ValueTraits 示例
为不同的值重用节点算法
简化值特性定义
有状态的值特性
线程安全保证
Boost.Intrusive 迭代器特性
空前向迭代器
可怕的迭代器
具有等效键的有序关联容器的稳定性和提示插入
获取相同类型并减少符号长度
设计说明
Boost.Intrusive 在性能敏感环境中的应用
Boost.Intrusive 在空间受限环境中的应用
Boost.Intrusive 作为基本构建块
扩展 Boost.Intrusive
性能
后向插入和销毁
反转
排序
写访问
结论
索引
类索引
typedef 索引
函数索引
发行说明
Boost 1.86 发行版
Boost 1.85 发行版
Boost 1.82 发行版
Boost 1.81 发行版
Boost 1.80 发行版
Boost 1.79 发行版
Boost 1.77 发行版
Boost 1.76 发行版
Boost 1.75 发行版
Boost 1.73 发行版
Boost 1.71 发行版
Boost 1.70 发行版
Boost 1.67 发行版
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.51 发行版
Boost 1.49 发行版
Boost 1.48 发行版
Boost 1.46 发行版
Boost 1.45 发行版
Boost 1.40 发行版
Boost 1.39 发行版
Boost 1.38 发行版
Boost 1.37 发行版
Boost 1.36 发行版
参考
致谢
参考
头文件 <boost/intrusive/any_hook.hpp>
头文件 <boost/intrusive/avl_set.hpp>
头文件 <boost/intrusive/avl_set_hook.hpp>
头文件 <boost/intrusive/avltree.hpp>
头文件 <boost/intrusive/avltree_algorithms.hpp>
头文件 <boost/intrusive/bs_set.hpp>
头文件 <boost/intrusive/bs_set_hook.hpp>
头文件 <boost/intrusive/bstree.hpp>
头文件 <boost/intrusive/bstree_algorithms.hpp>
头文件 <boost/intrusive/circular_list_algorithms.hpp>
头文件 <boost/intrusive/circular_slist_algorithms.hpp>
头文件 <boost/intrusive/derivation_value_traits.hpp>
头文件 <boost/intrusive/hashtable.hpp>
头文件 <boost/intrusive/intrusive_fwd.hpp>
头文件 <boost/intrusive/linear_slist_algorithms.hpp>
头文件 <boost/intrusive/link_mode.hpp>
头文件 <boost/intrusive/list.hpp>
头文件 <boost/intrusive/list_hook.hpp>
头文件 <boost/intrusive/member_value_traits.hpp>
头文件 <boost/intrusive/options.hpp>
头文件 <boost/intrusive/pack_options.hpp>
头文件 <boost/intrusive/parent_from_member.hpp>
头文件 <boost/intrusive/pointer_plus_bits.hpp>
头文件 <boost/intrusive/pointer_rebind.hpp>
头文件 <boost/intrusive/pointer_traits.hpp>
头文件 <boost/intrusive/priority_compare.hpp>
头文件 <boost/intrusive/rbtree.hpp>
头文件 <boost/intrusive/rbtree_algorithms.hpp>
头文件 <boost/intrusive/set.hpp>
头文件 <boost/intrusive/set_hook.hpp>
头文件 <boost/intrusive/sg_set.hpp>
头文件 <boost/intrusive/sgtree.hpp>
头文件 <boost/intrusive/sgtree_algorithms.hpp>
头文件 <boost/intrusive/slist.hpp>
头文件 <boost/intrusive/slist_hook.hpp>
头文件 <boost/intrusive/splay_set.hpp>
头文件 <boost/intrusive/splaytree.hpp>
头文件 <boost/intrusive/splaytree_algorithms.hpp>
头文件 <boost/intrusive/treap.hpp>
头文件 <boost/intrusive/treap_algorithms.hpp>
头文件 <boost/intrusive/treap_set.hpp>
头文件 <boost/intrusive/trivial_value_traits.hpp>
头文件 <boost/intrusive/unordered_set.hpp>
头文件 <boost/intrusive/unordered_set_hook.hpp>

Boost.Intrusive 是一个向 C++ 世界呈现一些侵入式容器的库。侵入式容器是特殊的容器,与非侵入式容器(如 STL 容器)相比,它们提供更好的性能和异常安全保证。

侵入式容器的性能优势使其非常适合作为高效构建复杂容器(如多索引容器)或设计高性能代码(如内存分配算法)的构建块。

虽然侵入式容器在 C 语言中被广泛使用,但由于标准容器的存在而不支持侵入式技术,它们在 C++ 中越来越被遗忘。Boost.Intrusive 希望通过将实现封装在类似 STL 的接口中来推动侵入式容器的使用。因此,任何熟悉标准容器的人都可以轻松使用 Boost.Intrusive

无需编译任何内容即可使用 Boost.Intrusive,因为它是一个仅包含头文件的库。只需将您的 Boost 头文件目录包含在您的编译器包含路径中即可。

Boost.Intrusive 已在以下编译器/平台上进行了测试

  • Visual C++ >= 7.1。
  • GCC >= 4.1。
[Warning] 警告

GCC < 4.3 和 MSVC < 9.0 已被弃用,将在下一个版本中删除。


PrevUpHomeNext