![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL容器解析
文章平均质量分 63
C++ STL容器底层实现
pengchenxin
这个作者很懒,什么都没留下…
展开
-
C++内存管理
四大基本构件一、new/delete1.new/delete的调用过程new的调用过程是:首先调用operator new分配空间(operator new的底层还是使用malloc来分配空间),然后调用对象的构造函数。delete的调用过程:首先是调用对象的析构函数,然后调用operator delete(底层使用free实现)释放空间注意:这就是new/delete与malloc/free的区别,虽然new/delete底层还是调用malloc和free,但是new/delete多出来的原创 2022-05-12 20:39:18 · 261 阅读 · 0 评论 -
优先队列priority_queue
一、概述顾名思义,priority_queue是一个拥有权值观念的queue。其里面的元素的排列顺序是通过最大堆来决定的。最大的元素在堆顶,形成了一个最大堆。缺省的情况下priority_queue是利用一个max-heap来实现的。而max-heap是一个以vector表现的complete binary tree。注意:对于一个堆来说,最大的元素在堆顶,但是后面的元素不一定是有序的。2.max-heap实现优先队列最大堆的创建每添加一个元素,就把这个堆构建成最大堆,以确保堆顶元素最大。然后当原创 2022-05-03 16:08:40 · 190 阅读 · 0 评论 -
stack和queue
一、stack1.概述stack(栈)是一种先进后出的数据结构。它只有一个出口。所以stack不允许有遍历行为。在缺省的情况下stack以deque作为底层结构。也可以以链表作为底层结构。2.stack的一些操作3.stack没有迭代器stack的所有元素都必须符合先进后出的条件,只有stack顶端的元素才会被外界取用。stack不提供遍历功能,也不提供迭代器。二、queue1.概述queue(队列)是一种先进先出的数据结构。它有两个出口,如下图所示。在缺省的情况下stack以dequ原创 2022-05-03 14:50:20 · 1100 阅读 · 0 评论 -
deque容器介绍
一、概述deque是一个双向开口的连续线性空间。所谓双向开口,就是可以在头尾两端分别做插入和删除操作。deque和vector的差异:deque允许于常数时间内对头端进行元素的插入或删除操作。deque没有所谓的容量(capacity)概念,因为它是以动态地以分段连续空间组合而成,随时可以增加一段新的空间并连接起来。换句话说,向vector那样“因旧空间不足而重新分配一块更大的空间,然后复制元素,再释放旧空间”这样的事情在deque上是不会发生的。因此,deque没有必要提供所谓的空间保留(res原创 2022-05-02 15:59:08 · 372 阅读 · 0 评论 -
list容器介绍
一、概述list的好处是每次插入或删除一个元素,就配置或释放一个元素空间。并且,对于任何位置的插入或删除,list永远都是常数时间。二、list的数据结构1.list的节点list是一个环状双向链表2.list在内存中的结构这个链表是一个双向环状链表,在list的定义里面,有一个元素node用来指向当前的节点,因为它是一个双向环状链表,所以一个node就可以表示整个链表。刚开始时,node指向一个空的节点,这个节点的next指向链表的开始结点begin(),这个结点的prev指向链表里面最后一原创 2022-05-02 14:47:23 · 738 阅读 · 0 评论 -
vector容器
一、vector概述vector是动态连续空间,支持随机存取,迭代器的类型是Random Access Iterator。所以它支持下标访问。二、vector的实现原理1.vector动态空间的实现当vector当前的空间被充满时,如果还想要插入元素,那么必须扩充空间。扩充空间的过程是:首先在内存里面找到当前vector容量两倍的空闲的连续空间。然后进行配置空间、数据移动、释放旧空间的大工程。重新配置空间的时间成本很高,所以系统按两倍的方式扩充。2.vector的定义与常用的函数:三、ve原创 2022-04-28 09:02:09 · 735 阅读 · 0 评论