STL容器解析
文章平均质量分 63
C++ STL容器底层实现
pengchenxin
这个作者很懒,什么都没留下…
展开
-
C++内存管理
四大基本构件 一、new/delete 1.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 · 254 阅读 · 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 · 181 阅读 · 0 评论 -
stack和queue
一、stack 1.概述 stack(栈)是一种先进后出的数据结构。它只有一个出口。所以stack不允许有遍历行为。在缺省的情况下stack以deque作为底层结构。也可以以链表作为底层结构。 2.stack的一些操作 3.stack没有迭代器 stack的所有元素都必须符合先进后出的条件,只有stack顶端的元素才会被外界取用。stack不提供遍历功能,也不提供迭代器。 二、queue 1.概述 queue(队列)是一种先进先出的数据结构。它有两个出口,如下图所示。 在缺省的情况下stack以dequ原创 2022-05-03 14:50:20 · 1077 阅读 · 0 评论 -
deque容器介绍
一、概述 deque是一个双向开口的连续线性空间。所谓双向开口,就是可以在头尾两端分别做插入和删除操作。 deque和vector的差异: deque允许于常数时间内对头端进行元素的插入或删除操作。 deque没有所谓的容量(capacity)概念,因为它是以动态地以分段连续空间组合而成,随时可以增加一段新的空间并连接起来。换句话说,向vector那样“因旧空间不足而重新分配一块更大的空间,然后复制元素,再释放旧空间”这样的事情在deque上是不会发生的。因此,deque没有必要提供所谓的空间保留(res原创 2022-05-02 15:59:08 · 353 阅读 · 0 评论 -
list容器介绍
一、概述 list的好处是每次插入或删除一个元素,就配置或释放一个元素空间。并且,对于任何位置的插入或删除,list永远都是常数时间。 二、list的数据结构 1.list的节点 list是一个环状双向链表 2.list在内存中的结构 这个链表是一个双向环状链表,在list的定义里面,有一个元素node用来指向当前的节点,因为它是一个双向环状链表,所以一个node就可以表示整个链表。刚开始时,node指向一个空的节点,这个节点的next指向链表的开始结点begin(),这个结点的prev指向链表里面最后一原创 2022-05-02 14:47:23 · 701 阅读 · 0 评论 -
vector容器
一、vector概述 vector是动态连续空间,支持随机存取,迭代器的类型是Random Access Iterator。所以它支持下标访问。 二、vector的实现原理 1.vector动态空间的实现 当vector当前的空间被充满时,如果还想要插入元素,那么必须扩充空间。扩充空间的过程是:首先在内存里面找到当前vector容量两倍的空闲的连续空间。然后进行配置空间、数据移动、释放旧空间的大工程。重新配置空间的时间成本很高,所以系统按两倍的方式扩充。 2.vector的定义与常用的函数: 三、ve原创 2022-04-28 09:02:09 · 722 阅读 · 0 评论