STL源码剖析
这个专栏用于记录我在学习侯捷老师的《STL源码剖析》这本书的过程中的笔记,如果有错误和说的不清楚的地方,欢迎留言讨论,大家一起学习,共同进步
ayesawyer
这个作者很懒,什么都没留下…
展开
-
stl源码剖析序列式容器之slist、priority_queue
1.priority_queue 很明显,这是一个拥有权值观念的先进的queue,哈哈哈,它内部的元素不是像queue一样按照被推入的次序排列的,而是按照元素的权值排列,权值最高在最前面。缺省情况下,priority_queue是使用max_heap实现的,后者是一个vector表现的完全二叉树,max_heap可以满足priority_queue所需要的“以权值高低自动递减排序”的特性,由于其完...原创 2019-07-31 09:27:48 · 213 阅读 · 0 评论 -
stl源码剖析序列式容器之heap
heap(implicit representation,隐式表述) heap是为了实现一种priority queue实现的,就是大根堆、小根堆。直接说需要的部分吧,只需要一个vector和heap算法就ok了,heap算法包括下面几种: push_heap,因为要满足complete binary tree,所以直接插入到vector的end()这个位置,插入之后不一定满足max_heap,所...原创 2019-07-31 09:27:51 · 106 阅读 · 0 评论 -
stl源码剖析序列式容器之stack、queue
因为我讲的是以queue为底层容器的stack和queue,所以起始讲得很粗糙,只是做个记录而已,具体的可以看上一篇关于deque的博文。 stack允许新增元素、移除元素、取得最顶端元素,但是除了最顶端以外,没有任何其它办法可以存取stack的其它元素,也就是不允许有遍历行为,只有一个出口,所以直接封闭deque的头部接口就可以实现一个stack了,也是因为这个原因,STL stack只能称为a...原创 2019-07-31 09:27:55 · 142 阅读 · 0 评论 -
stl源码剖析序列式容器之deque
deque叫做双向队列,是一种双向开口的连续线性空间(伪连续),但是它的头部操作效率奇差无比,难以被接受,并且deque和vector的差异在于deque允许参数时间内对头端进行元素的插入和删除操作,deque没有容量的概念,动态的以分段连续空间组合而成,随时可以增加一段新的空间并且链接起来。deque也提供了random access iterator,但它的迭代器也不是普通指针,复杂度远在ve...原创 2019-07-31 09:28:00 · 239 阅读 · 0 评论 -
stl源码剖析序列式容器之list
相比较于上一篇文章说到的vector,list就复杂很多,但是它每次插入或者删除一个元素,就配置或者释放一个元素空间。因此,list对于空间的运用有绝对的精准,对于任何位置的插入或删除,list都是常数时间。这两个是最常用的容器,一般是由元素的多少,元素的构造复杂度,元素的存取行为特性等决定使用哪一种容器的。 对于list来说,list本身和list的节点是两种不同的结构,需要对它进行分开设计,其...原创 2019-07-30 09:52:53 · 133 阅读 · 0 评论 -
stl源码剖析序列式容器之vector
首先介绍下容器的概念,容器是将一些运用最广的数据结构实现出来,并且根据数据在容器中的排列特性,这些数据结构分为序列式容器以及关联式容器两种。其中序列式容器包括array(c++自建)、vector、heap、priority_queue(由heap演变)、list、slist、deque、stack和queue(由deque演变),关联式容器包括RB-tree、set和map和multiset和...原创 2019-07-30 09:36:06 · 122 阅读 · 0 评论