【STL源码剖析】
小呀小二笙
斯人若彩虹,遇上方知有~~~
展开
-
STL源码剖析(一)
欢迎大家来访二笙的小房子,一同学习分享生活!文章目录写在前面1.了解STL1.1 STL概述1.2 STL的历史1.3 STL六大组件1.4 GNU open source2. 组态设置2.1 环境组态设置2.2 部分组态测试写在前面学习STL,了解STL的历史与发展,深度剖析STL源码,提高自己的编程能力!!!1.了解STL1.1 STL概述STL诞生:为了建立数据结构和算法的...原创 2018-11-09 13:14:58 · 1408 阅读 · 0 评论 -
STL源码剖析(五)hashtable
文章目录1. hashtable概述1.1 线性探测1.2 二次探测1.3 开链法2. hashtable的桶与节点3. hashtable迭代器4. hashtable数据结构5. hashtable构造与内存管理6. 元素操作7. hash functions1. hashtable概述hashtable,即我们在数据结构中所说的散列表,也叫哈希表,在插入、删除、搜寻等操作上具有“常数平...原创 2018-12-02 01:18:02 · 620 阅读 · 0 评论 -
STL源码剖析 RB-tree
文章目录1. RB-tree概述1.1 关于二叉搜索树1.1.1 二叉搜索树简介1.1.2 二叉搜索树的性质1.1.3 平衡二叉搜索树1.2 RB-tree1.3 RB-tree平衡性修正2. 节点及迭代器设计2.1 节点设计2.2 迭代器设计2.2.1 header设计2.2.2 设计迭代器1. RB-tree概述RB-tree,即红黑树,是一种平衡二叉搜索树,由二叉搜索树经过某种特定的操...原创 2018-11-28 16:25:34 · 1047 阅读 · 0 评论 -
STL源码剖析(五)【hash_set、hash_map】
hash_set与set区别及联系与set大同小异,set以RB-tree作为其底层,而hash_set以hash table作为其底层两者都是借由其底层操作完成我们所看到的那些操作二者最大的不同在于set的底层RB-tree有自动排序功能,所以反映在set中也含有自动排序功能,而hashtable并无自动排序功能,自然hash_set也无自动排序功能运用hash_set#incl...原创 2018-12-02 16:33:52 · 409 阅读 · 0 评论 -
STL源码剖析(四)序列式容器--slist
1. slist概述slist,即我们数据结构课程中所学的单链表,与之非常类似的是我们前面所解析到的listslist与list的主要差别在于:slist的迭代器属于单向的Forward iterator,list的迭代器则属于Bidirectional iterator;因此slist的功能受到限制,不过其耗用空间比较少,某些操作快作为一个单向链表,其局限性在于插入的时候需要将元素插...原创 2018-11-26 20:15:11 · 224 阅读 · 0 评论 -
STL源码剖析(五)关联式容器--【set、multiset、map、multimap】
文章目录1. 写在前面2. set2.1 set性质2.2 set实现2.3 multiset3. map3.1 map性质3.2 pair3.3 map实现3.4 insert()函数及subscript()操作3.5 multimap1. 写在前面在前面我们对于RB-tree的设计与实现都有了一定的了解,那么这一节中所要解析的set以及map看起来就简单了许多,因为这两者都是以RB-tr...原创 2018-11-29 17:03:59 · 388 阅读 · 0 评论 -
STL源码剖析(四)heap--priority_queue
文章目录1. heap概述2. 为何选择heap作为priority queue的底层机制?3. binary heap4. heap算法5. priority_queue1. heap概述heap,即我们在数据结构中所说的堆;在STL中我们所应用到priority queue中作为其操作实现的是binary max heap(最大二叉堆),是一种complete binary tree(完...原创 2018-11-25 16:10:47 · 184 阅读 · 0 评论 -
STL源码剖析(四)容器适配器--stack、queue
文章目录1. 写在前面2. stack--queue2.1 satck概述2.1.1 stack实现2.1.2 stack迭代器2.2 queue概述2.2.1 queue实现2.2.2 queue迭代器1. 写在前面容器适配器:具有”修改某物接口,形成另一种风貌“之性质者,称为adapter,而又以容器作为其底层,故称之为container adapter容器适配器有3种,分别是...原创 2018-11-24 21:14:18 · 293 阅读 · 0 评论 -
STL源码剖析(四)序列式容器--deque
1. 关于deque1.1 deque概述deque,即我们常说的队列,是一个双向开口的连续线性空间,可以在头尾两端分别做元素的插入和删除操作deque由一段段的定量连续空间组成,稍后再介绍1.2 deque与vector区别1. deque允许于常数时间内对起头端进行元素的插入或移除操作2. deque没有所谓的容量观念3. 为了提高效率,尽可能选择vector而不是deque...原创 2018-11-24 15:30:36 · 404 阅读 · 0 评论 -
STL 源码剖析(四)序列式容器--vector
文章目录1. 写在前面2. vector2.1 与array的区别2.2 vector中capacity(容量)1. 写在前面以下主要记录一些关于序列式容器中重要的一些知识点以及疑难杂症,并不特别详细分析。2. vector2.1 与array的区别array是静态空间,一旦配置就不能改变,要更换时需要自己来更改:首先配置一块新空间,将元素从旧址搬到该新空间,然后将旧址还给系统v...原创 2018-11-19 10:29:21 · 314 阅读 · 0 评论 -
STL源码剖析(三)迭代器与traits编程
文章目录1. 迭代器概念1.1 基本概念1.2 迭代器设计理念2. 引出traits编程3. traits编程3.1 traits编程技术3.2 partial specialization(偏特化)3.3 traits3.4 常用的迭代器型别3.5 dispatch到函数1. 迭代器概念1.1 基本概念一种抽象的设计概念。在《Design Patterns》中有如下定义:提供一种方...原创 2018-11-16 18:39:05 · 348 阅读 · 0 评论 -
STL源码剖析(四)序列式容器--list
1. 关于list1.1 首先在介绍list之前先来观察一下list的节点结构:template <class T>struct __list_node { typedef void* void_pointer; void_pointer prev; void_pointer next; T data;};从上述节点结构很清楚list是一个双向链表1.2 与v...原创 2018-11-20 21:38:48 · 277 阅读 · 0 评论 -
STL源码剖析(二)空间配置器
文章目录1. 写在前面2. SGI空间配置器2.1 SGI标准空间配置器2.2 SGI特殊的空间配置器,std::alloc2.3 构造和析构基本工具2.4 空间的配置与释放2.5 内存基本处理工具1. 写在前面首先需要理解为什么将空间配置器这一组件放在第二章进行讲解?因为STL中的操作对象都存放在容器中,而容器需要空间配置器来配置空间,因此空间配置器作为STL中最重要的一个组件,理解了空间...原创 2018-11-13 16:56:33 · 201 阅读 · 0 评论 -
深度解析--SGI STL 空间配置与释放
1.SGI 空间配置与释放对象构造前的空间配置与对象析构后的空间释放,由<stl_alloc.h>负责,SGI主要考虑以下四个步骤:1.向system heap要求空间2.考虑多线程状态3.考虑内存不足时的应对措施4.考虑过多“小型区块”可能造成的内存碎片问题SGI以malloc()和free()完成内存的配置与释放,但考虑到小型区块可能造成的内存破碎问题,SGI设置了双...原创 2018-11-13 16:51:44 · 651 阅读 · 0 评论 -
哈希表心得
出自陈皓博客《哈希表心得》,链接:http://blog.csdn.net/haoel/article/details/2863我们知道,哈希表是一个固定大小的数组,数组的每个元素是一个链表(单向或双向)的头指针。如果KeyKeyKey一样,则在一起,如果KeyKeyKey不一样,则不在一起。哈希表的查询是飞快的。因为它不需要从头搜索,它利用KeyKeyKey的“哈希算法”直接定位,查找非...转载 2019-05-11 16:36:56 · 1467 阅读 · 0 评论