![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
stl学习
文章平均质量分 80
explore翔
安徽某985小硕,记录日常学习生活,欢迎大家交流指教。
展开
-
STL之关联容器及考点
但若你对内存使用特别严格,希望程序尽可能少消耗内存,那么一定要小心,unordered_map 可能会让你陷入尴尬,特别是当你的unordered_map 对象特别多时,你就更无法控制了,而且unordered_map 的构造速度较慢。而在关联式容器中,insert不会使迭代器失效,(同样,list等非连续存储的容器,insert都不会失效,因为都是构造一个元素加到链表或者树上,不会出现空间不够的问题。,以结点为单位存放数据,结点的地址在内存中不一定连续,每次插入或删除一个元素,就配置或释放一个元素空间。原创 2022-12-29 21:21:01 · 163 阅读 · 0 评论 -
STL之stack,queue,heap,优先队列(适配器和仿函数)
1、stack我们都知道,栈是一种先进后出的结构,我们可以增加元素,删除头部元素,获取头部元素,但是栈无法遍历。我们都知道deque是双向开口的数据结构,只要把它作为底部结构,并封闭头部端口的相关操作,就可以轻易实现栈。因此栈不称为容器,而是一种容器适配器。同时,list(双向循环链表)也可以作为栈的底部结构。因为只有顶部元素可以利用,所以栈是没有迭代器的。源代码也十份简短。2、queue队列是一种先进先出的结构,有两个开口,称为顶端和底端,只有底端可以插入元素,顶端可以输出元素,所以队列也是不原创 2021-05-04 19:15:09 · 182 阅读 · 0 评论 -
STL之deque解析
1、deque和vector比较vector是单向开口的连续线性空间,而deque是双向开口的连续线性空间,也就是说可以在头尾两端做插入删除操作。虽说vector也可以在头部增加元素比如使用insert(begin(),1),但是效率很低涉及到移动元素以及一些移动的细节。deque和vector最大差异在于两点:1、deque可以实现常数复杂度的头部插入删除操作;2.deque没有所谓的容量概念,因为它是动态地以分段连续空间组合而成。随时可以增加一段空间并组合起来。所以不会出现vector那样空间原创 2021-04-30 22:33:38 · 344 阅读 · 0 评论 -
STL之list解析
list相当于链表的形式。它如果新增空间,只需要配置一个,不会浪费。并且对于新增删除元素都是O(1)的时间复杂度。1、list节点list本身和list节点是不同的结构,需要分开设计。节点结构如下:2、list的迭代器list不向vector那样占用连续的空间。所以list的迭代器不能是普通的指针。由于list是一个双向链表,迭代器必须提供前移和后移的能力。list有一个重要的性质,插入操作不会造成原有的list迭代器失效。3.List的数据结构list是一个环状的双向链表,所以一个指针就可原创 2021-04-28 21:53:45 · 166 阅读 · 0 评论 -
vector容器学习
vector的数据安排和操作方式,和array很相似。但是vector优点是空间的灵活性。array是静态空间,如果我们想要多增加元素,必须手动申请,而vector会自动扩充空间。再也不用担心空间不足申请很大的array.vector实现关键在于对大小的控制以及重新配置时数据移动效率。如果每次新增一个元素就申请一个元素的空间,那么效率很低。下面我们会学习SGI vector的空间配置策略。1、vector的迭代器因为vector维护的是一个连续线性空间,所以普通指针作为迭代器足够满足要求,因为*,++原创 2021-04-26 22:51:07 · 309 阅读 · 0 评论 -
stl第二级空间配置器 __defult_alloc_template
之前说了第一级的空间配置器。这里再说一下第二级。我们知道大于128字节的内存分配交给第一级,小于128级的交给第二级。第二级空间配置器增加了一些机制来避免太多的小额区块造成的内存碎片。并且太多的小内存碎片对系统性能来说也是一种负担。为什么这么说呢?因为我们每分配一块内存,都得有一些税交给系统,里面记录了该区块的大小。内存越小,税就相对越大。那么第二级空间配置器的做法是:小于128的内存需求给内存池管理,此法也称为次层配置。每次配置一块大内存,并维护一个自由链表。为了方便管理,SGI配置器会将需求原创 2021-04-22 20:47:13 · 210 阅读 · 0 评论 -
1.STL简介和空间配置器
STL(Standard Template Library,标准模板库),从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。1、六大组件介绍空间配置器:内存池实现小块内存分配,对应到设计模式–单例模式(工具类,提供服务,一个程序只需要一个空间配置器即可),享元模式(小块内存统一由内存池进行管理)2.迭代器:迭代器模式,模板方法3.容器:STL的核心之一,其他组件围绕容器进行工作:迭代器提供访问方式,空间配置器提供容器原创 2021-04-21 16:28:13 · 144 阅读 · 0 评论