![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL源码剖析
文章平均质量分 73
stt2019
这个作者很懒,什么都没留下…
展开
-
【STL源码剖析】第四章 序列式容器 之 vector底层实现
第四章 序列式容器(sequence containers)vectorvector概述vector的数据安排以及操作方式,与array非常相似。两者的唯一差别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;vector的动态空间 ,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。vector的实现技术,关键在于对其大小的控制以及重新配置时的数据移动效率。vector迭...原创 2018-05-25 16:24:01 · 474 阅读 · 0 评论 -
【STL源码剖析】第五章 关联式容器 之 hashtable底层实现
hashtable二叉搜索树具有对视平均时间的表现,但这种的表现构造在一个假设上:输入数据有足够的随机性。这一节介绍一种名为hastable(散列表)的数据结构,这种结构在插入、删除、搜寻等操作上也具有“常数平均时间”的表现,而这种表现是以统计为基础的,不需仰赖输入元素的随机性。hashtable概述hashtable通过hash function将元素映射到不同的位置,但当不同的元素通过hash...原创 2018-06-16 21:57:40 · 503 阅读 · 0 评论 -
【STL源码剖析】第四章 序列式容器 之 heap和priority_queue底层实现
heapheap概述heap并不归属于STL容器组件,它扮演priority queue的助手。binary max heap是priority queue的底层机制。binary heap是一种complete binary tree(完全二叉树),也就是说,整棵binary tree除了最底层的叶节点(s)之外,是填满的,而最底层的叶节点(s)由左至右不得由空隙。complete binary...原创 2018-06-08 17:09:12 · 505 阅读 · 0 评论 -
【STL源码剖析】第五章 关联式容器 之 set、map、multiset和multimap
set所有的元素都会根据元素的键值自动被排序。set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值。set不允许两个元素有相同的键值。不可以通过set的迭代器改变set的元素值。因为set元素值就是其键值,关系到set元素的排列规则。如果任意改变set元素值,会严重破坏set组织。set源码中,set<T>::iterator被定义为底层R...原创 2018-06-15 17:40:23 · 289 阅读 · 0 评论 -
【STL源码剖析】第五章 关联式容器 之 RB-tree(红黑树)
RB-treeRB-tree不仅是一个二叉搜索树,而且必须满足一些规则:每个节点不是红色就是黑色(图中深色代表黑,浅色代表红)根节点为黑色如果节点为红,其子节点必须为黑任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同根据规则4,新增节点不许为红;根据规则3,新增节点之父节点必须为黑。当新节点根据二叉搜索树的规则到达其插入点,却未能符合上述条件时,就必须调整颜色并旋转树形。插入节点在图...原创 2018-06-14 21:44:16 · 481 阅读 · 0 评论 -
【STL源码剖析】第四章 序列式容器 之 stack和queue底层实现
stackstack概述stack是一种先进后出的数据结构。它只能有一个出口。stack允许新增元素、移除元素、取得最顶端元素。但除了最顶端元素外,没有任何其他方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。将新元素推入stack的操作称为push,将元素推出stack的操作称为pop。stack定义完整列表以某种既有容器作为底部结构,将其接口改变,使...原创 2018-05-31 22:22:53 · 1999 阅读 · 2 评论 -
【STL源码剖析】第四章 序列式容器 之 deque底层实现
dequedeque概述vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端分别做元素的插入和删除操所。vector当然也可以在头尾端进行操作(从技术观点),但是其从头部操作效率奇差,无法被接受。deque和vector的最大差异,一在于deque允许常数时间内对起头端进行元素的插入或移除操作,二在于deque没有所谓的容量概念,因为它...原创 2018-05-31 20:34:02 · 6384 阅读 · 2 评论 -
【STL源码剖析】第五章 关联式容器 之 树的导览
第五章 关联式容器标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多建集合)和multimap(多键映射表)。这些容器的底层实现极值均以RB-tree(红黑树)完成。RB-tree也是一个独立容器,但并不开放给外界使用。此外,SGI STL还提供了一个不在标准规格之列的关联式容器:hash table(散列表),以及以此hash table为...原创 2018-06-13 20:23:20 · 330 阅读 · 0 评论 -
【STL源码剖析】第四章 序列式容器 之 list底层实现
listlist概述list是双向链表 ,相比于vector的连续线性空间,list就显得复杂许多,她的好处是每次插入或删除一个元素,就配置或释放一个元素空间 。list对空间的运用绝对的精准,一点儿也不浪费。而且,对任何位置的元素插入或元素移除,list永远是常数时间。list的节点list本身和list节点是不同的结构,需要分开设计。以下是STL list的节点结构: template...原创 2018-05-29 22:31:14 · 983 阅读 · 0 评论 -
【STL源码剖析】第三章 迭代器(iterators)概念与traits编程技法
第三章 迭代器(iterators)概念与traits编程技法迭代器设计思维——STL关键所在STL的中心思想在于:将数据容器(containters)和算法(algorithms)分开,彼此独立设计,最后再以一帖胶着剂撮合在一起。迭代器是一种smart pointer迭代器是一种行为类似指针的对象,而指针的各种行为中最常见也最方便的便是内容提领(dereference)和成员访问(member ...原创 2018-05-24 22:09:05 · 394 阅读 · 0 评论 -
【STL源码剖析】第二章 空间配置器(allocator)
第二章 空间配置器(allocator)具备次配置力(sub-allocation)的SGI空间配置器SGI标准的空间配置器 SGI定义了一个符合部分标准,名为allocator的配置器,效率不高,只把c++的::operator new和::operator delete做了一层薄薄的包装,SGI没有用过 。SGI特殊的空间配置器,std::alloc allocator只是基层内存配置/释放行...原创 2018-05-22 21:21:29 · 719 阅读 · 0 评论 -
【STL源码剖析】 第一章 概论与版本介绍
第一章 概论与版本介绍STL六大组件:容器(containers):各种数据结构,如vector,list,deque,set,map,用来存放数据。从实现角度来看STL容器是一种class template。算法(algorithms):各种常用的算法如sort,search,copy,erase… 从实现角度来看STL算法是一种function template。迭代器(iterators):...原创 2018-05-22 14:51:53 · 325 阅读 · 0 评论 -
【STL源码剖析】第五章 关联式容器 之 hash_set、hash_map、hash_multiset和hash_multimap
hash_sethash_set以hashtable为底层实现机制。由于hash_set所供应的操作接口,hashtable都提供了,所以几乎所有的hash_set操作行为,都只是转调用hashtable的操作而已。运用set目的是能够快速搜寻元素,这一点,不论底层是RB-tree或是hashtable都可以达成任务。但是,RB-tree有自动排序功能而hashtable没有,反应出来的结果就是,...原创 2018-06-18 16:19:00 · 283 阅读 · 0 评论