![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL源码
文章平均质量分 91
听说西佳佳难得很
要学的有好多……
是自己的功课,在这里没有必要欺骗自己,要好好弄懂在记录的知识点。感受到孤单的时候也要向前,努力成为最完善,最有力,最强大的自己。
展开
-
STL——空间配置器剖析(一级空间配置器、二级空间配置器的本质及运用场合,是如何用内存池去管理的)
一级空间配置器、二级空间配置器的本质及运用场合,是如何用内存池去管理的如何使用空间配置器每个容器都会通过默认参数指定好allocator,不需要显示声明,如定义一个vector类容器:std::vector<int> vecTemp;而完整的vecTemp声明应该是vector<int,allocator<int>> vecTemp;加入自定义了将内存分配指向磁盘或者其他存储介质空间的allocator,那么只要在声明时传入设计好的allocator,不再使用默认原创 2020-06-25 23:42:57 · 642 阅读 · 3 评论 -
STL——heap(heap并不属于STL容器组件)C++实现
heap并不归属于STL容器组件,它是个幕后英雄,扮演priority queue的助手,priority queue允许用户以任何次序将任何元素放入容器内,但是取出时一定是从优先级最高的元素开始取,heap正是具有这样的特性,适合作为priority queue的底层机制heap的四种算法:push_heap、pop_heap、sort_heap、make_heap,对应插入、删除、排序、建堆, 下述算法理解都以大顶堆为例由于堆是一棵完全二叉树,所以可以很轻易地用一个数组存储堆中的每一个元素,并且由子原创 2020-06-25 10:39:49 · 326 阅读 · 0 评论 -
STL源码剖析---空间配置器
STL空间配置器的源码,总结一下https://blog.csdn.net/Hackbuteer1/article/details/7724534转载 2020-06-24 22:48:54 · 125 阅读 · 0 评论 -
STL容器适配器之stack、queue的实现
stack是没有迭代器的,而STL要求每一种容器都必须内置一个迭代器,因此stack不是一种容器。 栈是一种先进后出的数据结构,一个栈的插入、删除或取值都只能在栈顶实现,在元素不弹出的前提下不能够遍历内部所有的元素。根据栈的性质,栈顶元素必须是最后一个进入的元素,根据这点,我们可以很容易得出一个结论:任何提供末端插入push_back、删除pop_back、访问back都能够被stack容器封装与修饰, 封装是指通过stack对象,不能直接访问被封装的底层容器,而修饰是指stack在对底层容器做封装时还提原创 2020-06-24 22:15:11 · 242 阅读 · 0 评论 -
STL源码——关联式容器及其底层红黑树实现(下) 之 红黑树的剖析(插入,删除操作)
代码其实就是按着平衡策略实现的,而硬记住这个策略略微空洞且为难,那么重点就应该是知道“为什么要这样调整”原创 2020-06-24 09:23:50 · 251 阅读 · 0 评论 -
STL源码——关联式容器及其底层红黑树实现(上) 之 关联式容器详细介绍
在侯捷老师源码剖析一书中对关联式进行源码剖析前先花了不少篇幅介绍红黑树的原理,这是因为关联式容器的底层依赖于RB_Tree实现。因此想尝试在下篇剖析红黑树的源码,在此之前,先复习一下各个关联式容器的方法及容器之间的不同之处或许对红黑树的剖析会有“带着问题看文章”的感觉。map/multimapmap和multimap都需要#include<map>, 唯一不同就是map的键值key不可以重复,但是multimap可以,也因此map可以用[]运算符,而multimap不支持map提供一对原创 2020-06-22 21:47:32 · 223 阅读 · 0 评论 -
STL deque 源码——deque特点、实现框架、源码分段剖析、常用函数总结(下)之源码剖析
源码剖析// deque的特性:// 对于任何一个迭代器i// i.node是map array中的某元素的地址. i.node的内容是一个指向某个结点的头的指针// i.first == *(i.node)// i.last == i.first + node_size// i.cur是一个指向[i.first, i.last)之间的指针// 注意: 这意味着i.cur永远是一个可以解引用的指针,// 即使其是一原创 2020-06-18 17:42:40 · 164 阅读 · 0 评论 -
STL deque 源码——deque特点、实现框架、源码分段剖析、常用函数总结(上)
一、deque的一些特点支持随机访问,即支持[ ]以及at(),但是性能没有vector好。可以在内部进行插入和删除操作,但性能不及list。deque 两端 都能够快速插入和删除元素,而vector只能在尾端进行。deque的元素存取和迭代器操作会稍微慢一些,因为deque的内部结构会多一个间接过程。deque迭代器是特殊的智能指针,而不是一般指针,它需要在不同的区块之间跳转。deque可以包含更多的元素,其max_size可能更大,因为不止使用一块内存。deque不支持对容量和内存分配时原创 2020-06-18 17:40:58 · 311 阅读 · 0 评论 -
STL list源码——实现框架、具体实现的详细分段剖析(迭代器的处理、list的实现)、list基本函数总结
list的底层采用的数据结构是环形的双向链表,相对于vector容器的连续线性空间,list插入或删除要付出的代价比vector小很多,对空间的运用有绝对的精准,一点也不浪费。但是list带有链表天生的弱点,就是不支持随机访问。从内置的迭代器角度分析,vector容器对应的迭代器为随机访问迭代器,而list容器内置的迭代器则为双向迭代器STL中提供的很多算法都是基于随机访问迭代器的,如sort函数使用的迭代器就是随机访问迭代器,因此list不能用这类算法,为此,STL又在list容器内置了其特有的算法。.原创 2020-06-17 16:23:09 · 194 阅读 · 0 评论 -
STLvector源码——实现框架、具体实现的详细分段剖析(重点是insert_aux在指定位置插入元素和在指定位置插入n个元素的源码)、vector实现的基本函数总结
VS2010的源码真的让人放弃,还是安安稳稳看侯捷老师的SGIvector容器概述vector是动态数组,与之对应的是array静态数组,array是静态空间,空间大小一旦配置了就不能改变;但vector如果想改变(变大或变小)都是可以做到的:改变过程: 1,首先配置一块新空间; 2,将元素从现在的地址一一复制到新地址; 3,再将原来空间空间释放至于什么时候进行扩大或缩小,vector内部会自动实现, 因此vector的实现技术关键就在于对其空间大小的控制以及重新配置时的数据移动效率vecto.原创 2020-06-16 00:29:45 · 520 阅读 · 1 评论 -
source Insight看STL源码——List
上一章学vector,不夸张的说大半的时间都在往回找代码上了,不断被typedef不断回看,哪怕可以跳转也找得很累,再一次验证了充分利用工具学习得必要性,接下来要剖析STL源码同时力扣的动态规划现在整理好同时其他分类也要跟上。还有重要的项目////(数据结构、算法、项目、源码)せの☀list不仅是一个双向链表,而且还是一个环状双向链表。另外,还有一个重要性质,插入操作和接合操作都不会造成原有的list迭代器失效,这在vector是不成立的。因为vector的插入操作可能造成记忆体重新配置,导致原有的迭原创 2020-06-08 16:28:27 · 588 阅读 · 0 评论 -
VS2010下 STL源码剖析1:vector1——capacity扩容代码、vector动态数组内部实现连续空间
vector的定义:typedef vector<_Ty, _Ax> _Myt;默认是两个参数,第二个参数有默认值allocator本身是一个类模板,是内存分配子,stl为分配一个默认的内存分配子allocator<_Ty>调用基类的构造函数typedef _Vector_val<_Ty, _Ax> _Mybase;哇这个allocator往回跳往回跳好复杂,基类的基类的基类也号复杂啧啧啧,等之后再回构造器吧 ===》直接到基类构造完,开始vector,ve原创 2020-05-28 00:15:18 · 256 阅读 · 0 评论