STL源码剖析
这瓜不包熟
这个作者很懒,什么都没留下…
展开
-
STL源码剖析:【4】Sequence Containers-List
List特性概述: 1.对于任意位置的插入或者删除,List常数时间 2.类比Vector,内存不再连续,通过指针进行连接 List数据结构: list的数据本身与list的节点是不同的结构,需要分开设计 以下是Stl list的节点结构: 以下是迭代器iterator的数据结构: 以下是List的数据结构: ...原创 2021-08-02 11:04:40 · 66 阅读 · 0 评论 -
STL源码剖析:【6】Associative Containers-红黑树
注意: 1.关联性平衡树容器插入一般分为两个部分:1)查找插入点 2)进行平衡树的重构原创 2020-05-11 17:00:19 · 103 阅读 · 0 评论 -
STL源码剖析:【5】Associative Containers-AVL-Tree
目的:避免深度的过度失衡 特性:左右子树的深度差不超过1 单旋转: 目的:为了调整外插入(左左(进行右旋转)-插入到左子节点的左子树 (右右(进行左旋转)))带来的不平衡问题 双旋转: 目的:为了调整内插入(左右(第一次为左旋转第二次为右旋转)/右左(第一次为右旋转第二次为左旋转))可能带来的不平衡问题 过程简化:原理是进行两次单旋转,其中第一次单旋转,将目的树变为具有外插入(退化)导致的不平衡问题,第二次单旋转,解决不平衡问题 ...原创 2020-05-08 19:27:30 · 127 阅读 · 0 评论 -
STL源码剖析:【4】Sequence Containers-deque
Deque:双向容器 特性概述 双向进出,可以使用push_back,push_front/(pop)来对容器元素进行初始化 结构:超级vector - 后面将一一展开 Deque:数据结构: 首先类比vector,vector 作为自增长连续内存容器,并不是完全动态增长的,它内部依靠内存空间的重新申请扩大+ 复制 + 释放原容器内存空间,来伪装内存上的动态扩展(代价是昂贵的) Deque...原创 2020-04-24 18:01:21 · 104 阅读 · 0 评论 -
STL源码剖析:【4】Sequence Containers-vector
Vector 特性概述: 类比Array(C++内置) (我们常用的数组);内存连续; 为容器型加入了迭代器; 因为内存空间连续,因此迭代器类型为原生指针 T* 最大不同是隐藏容量扩充机制,将扩充机制封装在Vector中,程序使用者不必为了扩容而增加额外逻辑 重点:自动扩充原理,插入,删除 原理 Vector数据结构: Class Data Member : iterator st...原创 2020-04-23 14:13:58 · 90 阅读 · 0 评论 -
STL源码剖析:【2】空间配置器-stl_alloc.h
construct与alloc的基本关系在上一篇中已经简单点出 SGI中设计了双层级配置器(alloc) 第一级配置器:直接使用malloc 和free 完成内存的配置和释放 第二级配置器:以分配内存的大小128bytes(记住这个显著的分界线) 决定调用第一级配置器,还是自身进行内存的分配 一个全局定义_USE_MALLOC: 决定将第一级(_malloc_alloc_templat...原创 2020-04-22 10:51:36 · 166 阅读 · 0 评论 -
STL源码剖析:【2】空间配置器-stl_construct.h
SGI特殊空间配置器:std::alloc new 运算符含有两个阶段的过程:(1):申请内存(内存分配) (2)调用构造函数初始化 同理delete也有两个过程。 为了精密分工STL allocator决定将两个阶段操作区分开来: 内存配置与释放alloc::allocate()与alloc::deallocate()完成 对象构造过程由::construct 和::deconstruct...原创 2020-04-21 20:02:10 · 311 阅读 · 0 评论