stl源码剖析
文章平均质量分 63
oyhy_
这个作者很懒,什么都没留下…
展开
-
STL源码剖析-空间配置器
1.allocator是空间配置器而不是内存配置器,空间不一定是内存,也可以是磁盘或其他辅助存储介质。但SGI STL提供的配置器配置的对象是内存。2.SGI标准的空间配置器,std::alloctor SGI定义了一个符合部分标准,名为alloctor的配置器,效率不高,只把c++的::operator new 和 ::operator delete做了一层薄薄的封装。3.c++用new原创 2017-04-19 14:02:29 · 479 阅读 · 0 评论 -
STL源码剖析-关联式容器之hash_set、hash_map、hash_multiset和hash_multimap
一、hash_set1、hash_set以hashtable为底层机制,hash_set的操作几乎都是转调用hashtable的函数而已。2、hash_set的元素没有自动排序功能。3、hash_set的使用方式与set完全相同。4、测试例子 #include<hash_set> #include<iostream> using namespace std;原创 2017-04-20 16:23:03 · 432 阅读 · 0 评论 -
STL源码剖析-关联式容器之hashtable
1.hashtable在插入,删除,搜寻操作上具有"常数平均时间"的表现,不依赖输入元素的随机性.2.hashtable通过hashfunction将元素映射到不同的位置,但当不同的元素通过hash function映射到相同位置时,便产生了"碰撞"问题.解决碰撞问题的方法主要有线性探测,二次探测,开链法等.3.线性探测当hash function计算出某个元素的插入位置,而该位置的空间已不可用时,原创 2017-04-20 16:16:24 · 381 阅读 · 0 评论 -
STL源码剖析-关联式容器之set,map,multiset和multimap
一.set1.set的特性是所有元素都会根据元素的键值自动排序,set元素的键值就是实值,实值就是键值.2.不能通过set的迭代器改变set的元素,set iterator是一种const iterator.3.客户端对set进行元素新增或者删除操作时,操作之前的所有迭代器在操作后都依然有效,被删除的元素的迭代器例外.4.STL set以RB-tree为底层机制,set的操作几乎都是转调用RB-tr原创 2017-04-20 14:59:19 · 354 阅读 · 0 评论 -
STL源码剖析-关联式容器之RB-tree
1.二叉树:任何节点最多只有两个子节点,这两个子节点称为左子节点和右子节点.2.二叉搜索树:任何节点的键值一定大于其左子树的每一个节点的键值,小于其右子树中的每一个节点的键值.3.红黑树不仅是一个二叉搜索树,还必须满足以下条件:1)每个节点不是红色就是黑色.2)根节点为黑色.3)如果节点为红色,其子节点必须为黑色.4)任意一个节点到NULL(树尾端)的任何路径,所含黑色节点数必须相同.根据规则4),原创 2017-04-20 14:41:03 · 302 阅读 · 0 评论 -
STL源码剖析-序列式容器之heap和priority_queue
一.heap1.heap概述heap并不归属于STL容器组件,扮演priority queue的助手,binary max heap适合作为priority queue的底层机制.binary heap是一种complete binary tree,整棵树除了最底层的叶子节点外都是填满的,而最底层的叶子节点从左至右不得有空隙.利用array来存储complete binary tree的所有节点,将原创 2017-04-20 11:36:31 · 318 阅读 · 0 评论 -
STL源码剖析-序列式容器之stack和queue
一.stack1.stack概述stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口.stack允许新增元素,移除元素,取得最顶端元素,但不允许遍历行为.由于stack是以底部容器完成其所有工作,而具有这种"修改某物接口,形成另一种风貌"之性质者,成为adapter(配接器).2.SGI STL以deque作为缺省情况下的stack底部结构 tem原创 2017-04-20 00:40:02 · 563 阅读 · 0 评论 -
STL源码剖析-序列式容器之deque
1.deque概述deque是一种双开口的连续线性空间,可以在头尾两端分别做元素的插入和删除操作.deque没有容量的概念,它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来.2.deque的中控器deque由一段一段的定量连续空间构成.一旦有必要在deque前端或尾端增加新空间,便配置一段定量连续空间,串接在整个deque的头端或尾端.deque的最大任务是在这些分段的定量连续空原创 2017-04-20 00:22:35 · 404 阅读 · 0 评论 -
STL源码剖析-序列式容器之list和slist
一.list1.list概述list是双向链表,对于任何位置的元素的插入或元素移除,list永远是常数时间.2.list的节点list本身和list节点是不同的数据结构,需要分开设计.STL list的节点结构: template <class T> struct __list_node { typedef void* void_pointer; v原创 2017-04-19 17:27:35 · 422 阅读 · 0 评论 -
STL源码剖析-序列式容器之vector
1.vector概述vector是动态空间,随着元素的加入,它内部机制会自行扩充空间以容纳新元素.vector的实现技术,关键在于其对大小的控制及重新配置时的数据移动效率.2.vector的迭代器vector的迭代器是普通指针,支持随机存取,提供的是Random Access Iterator. template<class T, class Alloc = alloc> clas原创 2017-04-19 16:25:44 · 383 阅读 · 0 评论 -
STL源码剖析-迭代器概念与traits编程技法
1.迭代器模式:提供一种方法,使之能够依序寻访某个容器所包含的各个元素,而又无需暴露该聚合物的内部表达式。2.STL中心思想:将数据容器和算法分开,彼此独立设计,最后应迭代器将它们撮合在一起。3.迭代器是一种只能指针,最重要的编程工作就是对operator*和operator->进行重载工作。4.迭代器例子: #include<iostream> #include<algorith原创 2017-04-19 15:15:27 · 552 阅读 · 0 评论 -
STL源码剖析-STL容器迭代器失效问题总结
一.vector1.当push_back一个元素后,若capacity大小与push_back前相比不变,则end操作返回的迭代器失效;若capacity大小与push_back前相比增大了,说明引起了内存重新分配,原来的内存被释放了,此时所有迭代器全部失效.2.当insert一个或多个元素后,若capacity大小与insert前相比不变,则指向插入点及之后的所有迭代器全部失效.若capacity原创 2017-04-20 17:44:12 · 367 阅读 · 0 评论