STL源码剖析
文章平均质量分 88
vector6_
linux c++/java
展开
-
map
map作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括 C++ 基本数据类型(int、double 等)、使用结构体或类自定义的类型。与此同时,在使用 map 容器存储多个键值对时,该容器会自动根据各键值对的键的大小,按照既定的规则进行排序。默认情况下,map 容器选用std::less排序规则(其中 T 表示键的数据类型),其会根据键的大小对所有键值对做升序排序。当然,根据实际情况的需要,我们可以手动原创 2021-01-03 23:06:37 · 136 阅读 · 0 评论 -
set
setset作为一种关联容器,使用比较函数对容器内的元素自动排序,通常以红黑树作为底层实现。搜索、删除和插入操作具有对数复杂度。template<class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>> class set;成员函数std::set< Key,Compare,Allocator>::setset();explicit set(原创 2021-01-03 23:05:21 · 109 阅读 · 2 评论 -
Rb-tree
Rb-tree红黑树(R-B TREE,全称:Red-Black Tree),本身是一棵二叉查找树,在其基础上附加了两个要求:树中的每个结点增加了一个用于存储颜色的标志域;树中没有一条路径比其他任何路径长出两倍,整棵树要接近于“平衡”的状态。红黑树对于结点的颜色设置不是任意的,需满足以下性质的二叉查找树才是红黑树:树中的每个结点颜色不是红的,就是黑的;根结点的颜色是黑的;所有为 nil 的叶子结点的颜色是黑的;(注意:叶子结点说的只是为空(nil 或 NULL)的叶子结点!)如果此结点原创 2021-01-03 23:02:07 · 253 阅读 · 3 评论 -
deque
dequedeque(双端队列)允许在其开始和结束处快速插入和删除元素。此外,在deque容器的任何一端插入和删除都不会使指向其余元素的指针或引用失效。与std::vector不同,deque容器的元素不是连续存储的:典型的实现使用单独分配的固定大小的数组序列,并附带额外的记录,这意味着对deque容器的索引访问必须执行两次指针解引用,而vector容器的索引访问只执行一次指针解引用。deque容器的存储可以根据需要自动扩展和收缩。展开deque容器比展开std::vector容器成本更低,因为它不涉原创 2020-12-29 01:32:14 · 171 阅读 · 2 评论 -
list
listlist作为一个序列式容器,支持在常量时间内插入和删除容器内任何位置的元素。它的实现为一个双链表,提供了bidirectional iterator,不支持快速随机访问。与std::forward_list相比,这个容器提供了双向迭代能力,但空间效率较低。在列表内或多个列表中添加、删除和移动元素不会使迭代器或引用失效。只有当相应的元素被删除时,迭代器才会失效。本文首先列出了list成员函数及相关非成员函数签名,之后对SGI STL std::list重点源码以注释的方式进行分析。由于常用的G原创 2020-12-29 01:27:28 · 192 阅读 · 1 评论 -
STL源码剖析之allocator&vector
STL源码剖析之Allocator&vector结合以前学习《STL源码剖析》笔记、理解(与当前版本部分实现细节存在差异),针对gcc6.4.1 STL源码(基于cpp11特性)的设计思想、实现细节作了分析。列出了一系列重要函数,对部分重点设计方式、实现细节做了注释。由于个人技术及文档编排水平有限,可能存在各种问题,欢迎指出及交流讨论。后续会基于本人的优化经验,发布出基于STL底层实现的优化。当然也会分享一些使用SGI STL的注意事项。本系列会保持更新。文章目录1.对象构造/析构 const原创 2020-10-25 00:54:09 · 649 阅读 · 0 评论