STL源码剖析
文章平均质量分 93
分析STL源码实现,学习侯捷先生的STL源码剖析记录
源码版本SGI stl-2.91.57
michael_maomao
enjoy life
展开
-
stl_tree.h 源码剖析
<STL源码剖析>导览关联式容器所谓关联式容器,观念上类似关联式数据库,每组数据都有一个键值(key)和一个实值(value)。当元素被插入到容器中时,容器内部结构(RB-Tree,或者是hash-table)便依照其键值大小,以某种特定规则将这个元素放置于适当位置。一般而言,关联式容器的内部结构是一个balanced binary tree(平衡二叉树),以便获得良好的搜寻效率.平衡二叉树有许多种类,包含AVL-tree,RB-tree,AA-tree.二叉搜索树所谓二叉搜原创 2020-05-13 23:44:25 · 604 阅读 · 0 评论 -
stl_deque.h源码剖析
deque概述<stl源码剖析>vector是单向开口的连续线性空间,deque则是双向开口的连续线性空间。双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。deque和vector最大的差异,在于deque允许于常数时间内对头端进行元素的插入或移除操作,二在于deque没有所谓的容量概念,因为它是动态的以分段连续的空间组合而成,随时可以增加一段新的空间并链接起来。像vector那样"因旧空间不足而重新配置一块更大空间,然后复制元素,在释放旧空间",这样的事情在deque是不会发原创 2020-05-12 23:43:24 · 270 阅读 · 0 评论 -
stl_vector.h源码剖析
vector简述<STL源码剖析>vector是动态空间,随着元素的加入,它的内部机制会自行扩充扩建以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助vector的实现技术,关键在于其对大小的控制以及重新配置时的数据移动效率。一旦vector有空间满载,此时扩充空间时"配置新空间/数据移动/释还旧空间"的大成本,时间成本很高。vector实现template <class T, class Alloc = alloc> // 默认allo原创 2020-05-11 22:43:23 · 628 阅读 · 0 评论 -
stl_list.h源码剖析
容器list双向环形链表list相较于vector的连续线性空间,list显得复杂许多,好处是每次插入或者删除一个元素,就配置或释放一个元素空间。因此list对于空间的运用绝对精准,一点也不浪费。而且对于任何位置的元素插入和元素移除,list永远是常数时间<STL源码剖析>相关图节点设计template <class T>struct __list_node { typedef void* void_pointer;//缺陷,使用时都得强转成_list_node类型原创 2020-05-11 20:55:15 · 247 阅读 · 0 评论 -
stl_alloc.h源码剖析
本文主要介绍std::allocstl_alloc.h内存配置操作由 alloc:allocate()负责内存释放操作由alloc::deallocate()负责stl_construct.h对象构造操作由::construct()负责对象析构操作由::destory()负责空间的配置与释放 std::allocSGI设计哲学:向system heap要求空间考虑多线...原创 2020-03-02 23:42:46 · 370 阅读 · 0 评论