![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL
破碎则重建
一天一小步
展开
-
红黑树与AVL树,各自的优缺点总结
本文内容来自链接:https://www.jianshu.com/p/37436ed14cc6特意转载来方便学习RB-Tree和AVL树作为BBST,其实现的算法时间复杂度相同,AVL作为最先提出的BBST,貌似RB-tree实现的功能都可以用AVL树是代替,那么为什么还需要引入RB-Tree呢?红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact| <= 1,它只要...转载 2020-02-19 11:56:08 · 1950 阅读 · 0 评论 -
详解STL中的map和hash_map区别
在网上看到有关STL中hash_map的文章,以及一些其他关于STL map和hash_map的资料,总结笔记如下:1、STL的map底层是用红黑树实现的,查找时间复杂度是log(n);2、STL的hash_map底层是用hash表存储的,查询时间复杂度是O(1);3、什么时候用map,什么时候用hash_map?这个药看具体的应用,不一定常数级别的hash_map一定比log(n)级别的...转载 2020-02-19 11:48:03 · 261 阅读 · 0 评论 -
STL 容器配接器
以底部容器完成所有工作,而具有这种修改某物接口而成为另一种风貌的性质者称为配接器, 因此STL stack queue priority_queue都称为容器配接器。stackstack是一种先进后出的数据结构,不允许有遍历行为。STL是以deque作为缺省情况下的stack底部结构。(deque为底部结构并封闭头部开口)。在容器deque中的命名为push_back() pop_back...原创 2020-02-19 11:19:25 · 320 阅读 · 0 评论 -
STL deque
deque是一种双向开口的连续线性空间,双向开口意思是可以在头尾两端分别做元素的插入和删除操作。vector其实也可以从头尾两端进行操作,从技术观点,但是效率奇差,无法接受。deque和vector的最大差异,一在于deque允许常数时间对头端进行元素的插入或移除操作。二在于deque没有所谓的容量观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间拼接起来。deque实现的复...原创 2020-02-18 23:03:03 · 150 阅读 · 1 评论 -
STL list
与vector的连续线性空间比,list 的好处是每次插入或删除一个元素,就配置或释放一个元素空间,对空间的利用很精准,且插入或删除都是常数时间。list 和vector是最常用的容器。STL list中 list是一个双向链表,其有一个重要的性质是插入操作(insert)和接合操作(splice)都不会造成原有的list迭代器失效,这在vector是不成立的,list的元素删除操作只有指向被删...原创 2020-02-18 16:52:29 · 253 阅读 · 0 评论 -
STL vector
vector与array对比,最大的差别在于空间的运用的灵活性,vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。vector的实现技术,关键在于其对大小的控制以及重新配置时数据移动效率。扩充空间要经过配置新空间、数据移动、释还旧空间的步骤。vector采用的数据结构很简单,为线性连续空间,它以两个迭代器start和finish分别指向配置得来的连续空间中目前已使...原创 2020-02-18 13:25:29 · 185 阅读 · 0 评论 -
STL源码剖析:hashtable
hashtable(散列表)数据结构,在插入、删除、搜寻操作上具有常数时间表现,而且这种表现是以统计为基础的,不需要依赖输入元素的随机性。使用hash function,可能会使得不同的元素被映射到相同的位置(也就是相同的索引),这就是碰撞问题,通常有以下的解决方法:线性探测、二次探测、开链等做法。线性探测负载系数,元素个数除以表格大小,负载系数永远在0-1之间,除非采用开链策略。当has...原创 2020-02-12 18:20:29 · 270 阅读 · 0 评论 -
STL源码剖析 关联式容器
上一章的篇幅有点长,这里简单记录一下利用了红黑树为底层机制的几个关联式容器。set /multisetset特性是,所有元素会根据元素的键值自动被排序,set元素的键值就是实值,实值就是键值,不允许两个元素有相同的键值。不能通过set的迭代器改变set的元素值,因为其值是其键值,关系到set元素的排列,如果改变set元素值会严重破坏set组织,在原理上,setiterator被定义为红黑树中...原创 2020-02-12 16:06:16 · 94 阅读 · 0 评论 -
STL源码剖析(三)红黑树原理
红黑树的大名以及关于关联式容器用的比较少,想一探究竟,于是先跳过了序列式容器。本博客主要记载比较重要以及自己理解的部分。红黑树红黑树是二叉搜索树,且满足一下规则1 每个节点不是红色就是黑色(在代码上用bool类型0/1分别表示)2 根节点为黑色3 如果节点为红色,其子结点必须为黑。(看过一些说法,就是不能子结点和父节点同时为红)4 任一节点至NULL(树尾端)的任何路径,所含之黑节点数...原创 2020-02-12 11:52:44 · 170 阅读 · 0 评论 -
STL源码剖析(二)
迭代器迭代器是一种行为类似指针的对象,而指针的各种行为中最常见也最重要的是内容提纲(dereference)和成员访问,因此迭代器最重要的编程工作是对operator*和operator->进行重载工作。参考auto_ptr的代码,重点以下两行:T& operator *()const { return pointee;}Toperator->()const{ retu...原创 2020-02-07 22:53:17 · 179 阅读 · 0 评论 -
STL源码剖析(一)
STL源码剖析(一)SGI STL的配置器与众不同,与标准规范不同,其名称是alloc而非allocator,且不带任何参数。因此要采用SGI配置器需要这样写 :vector<int ,std::alloc> iv;其实SGI 也定义有了一个标准的空间配置器std::allocator,但是其效率不佳,只是把C++的new 和delete包装起来而已。STL allocator...原创 2020-02-06 23:07:03 · 1231 阅读 · 2 评论