STL源码剖析
hackbuteer1
这个作者很懒,什么都没留下…
展开
-
STL源码剖析---vector
vector容器概述 vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,原创 2012-07-07 14:41:31 · 15845 阅读 · 6 评论 -
STL源码剖析---空间配置器
看过STL空间配置器的源码,总结一下: 1、STL空间配置器:主要分三个文件实现,stl_construct.h 这里定义了全局函数construct()和destroy(),负责对象的构造和析构。stl_alloc.h文件中定义了一、二两级配置器,彼此合作,配置器名为alloc. stl_uninitialized.h 这里定义了一些全局函数,用来填充(fill)或复制(copy原创 2012-07-07 14:31:27 · 10776 阅读 · 7 评论 -
STL源码剖析---list
相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。 list不仅是一个双向链表,而且还是一个环状双向链表。另外,还有一个重要性质,插入操作和接合操作都不会造成原有的list迭代器失效,这在vecto原创 2012-07-08 11:11:34 · 11585 阅读 · 5 评论 -
STL源码剖析---deque
一、deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector。array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是个假象,事实上是(1)另觅更大空间;(2)将原数据复制过去;(3)释放原空间三部曲。如果不是vector每次配置新空间时都有留下一些余裕,其成长假象所带来的代价将是相当高昂。原创 2012-07-09 15:44:59 · 11876 阅读 · 4 评论 -
STL源码剖析---迭代器失效小结
迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeof(vector::iterator)来查看,所占内存并不是4个字节。 首先对于vector而言,添加和删除操作可能使容器的部分或者全部迭代器原创 2012-07-10 21:32:20 · 13215 阅读 · 3 评论 -
const_cast的应用
对于const变量,我们不能修改它的值,这是这个限定符最直接的表现。但是我们就是想违背它的限定希望修改其内容怎么办呢?于是我们可以使用const_cast转换符是用来移除变量的const限定符。 const_cast类型转换能够剥离一个对象的const属性,也就是说允许你对常量进行修改。#includeusing namespace std;/*用法:const_cast原创 2011-06-17 11:01:00 · 8867 阅读 · 6 评论 -
STL源码剖析---STL容器特征总结(含迭代器失效)
Vector1、内部数据结构:连续存储,例如数组。2、随机访问每个元素,所需要的时间为常量。3、在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。4、可动态增加或减少元素,内存管理自动完成,但程序员可以使用reserve()成员函数来管理内存。5、迭代器失效插入:vector的迭代器在内存重新分配时将失效(它所指向的元素在该原创 2012-07-10 22:09:34 · 7229 阅读 · 4 评论 -
STL源码剖析---红黑树原理详解下
算法导论书上给出的红黑树的性质如下,跟STL源码剖析书上面的4条性质大同小异。 1、每个结点或是红色的,或是黑色的 2、根节点是黑色的 3、每个叶结点(NIL)是黑色的 4、如果一个节点是红色的,则它的两个儿子都是黑色的。 5、对于每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑色结点。 从红黑树上删除一原创 2012-07-18 19:54:08 · 21339 阅读 · 12 评论 -
STL源码剖析---红黑树原理详解上
一、红黑树概述 红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了红黑树的实现原理后,就会有更加深切的体会。 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL原创 2012-07-12 16:31:23 · 25993 阅读 · 11 评论