STL
文章平均质量分 78
MwjSolarBlog
这个作者很懒,什么都没留下…
展开
-
STL中设计一个简单的空间配置器
在STL中设计了一个默认的空间配置器来负责内存的申请与释放,因此在每种容器中比如vector中如果不显示的指定使用何种空间配置器将调用默认的空间配置器,一般通用的代码如下:#include#includeusing namespace std;int main(){ int ia[]={0,1,5,3,4}; unsigned int i; vec原创 2013-06-16 15:24:46 · 553 阅读 · 0 评论 -
STL中序列式容器之三deque
vector是单向开口的连续线性空间,而deque则是一种双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端都可以做元素的插入与删除操作。vector当然也可以在头尾两端进行操作(从技术观点),但是其头部操作其差,无法被接受。deque和vector的最大差异,一在于deque允许于常数时间内对起头端进行元素的插入或移除操作,二在于deque没有所谓容量(capacity)观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的时间并链接起来。原创 2013-08-21 16:24:35 · 658 阅读 · 0 评论 -
STL中序列式容器之四stack
stack是一种先进后出(FILO)的数据结构。它只有一个出口。stack允许新增元素、取得最顶端的元素。但除了最顶端外,没有任何方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。以某种既有容器作为底部结构,将其接口改变,使之符合“先进后出”的特性,形成stack。deque是双向开口的数据结构,若以deque为底部结构并封闭其前端,便轻而易举的形成了一个stack。原创 2013-08-21 22:28:19 · 752 阅读 · 0 评论 -
STL中序列式容器之二list
相比较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间原创 2013-08-18 15:48:42 · 1103 阅读 · 1 评论 -
STL中空间配置器的内存分配策略
在STL中考虑到小型区块所可能造成的内存破碎问题,SGI STL设计了双层级配置器,第一级配置器直接使用malloc()和free();第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,则视之为足够大,便调用第一级配置器;当配置区块小于128bytes时,则视之为过小,为了降低额外负担,便采用复杂的内存池的方式来整理,而不再求助于第一级配置器。原创 2013-08-06 11:42:21 · 990 阅读 · 0 评论 -
STL中迭代器(iterator)的设计模式
1转载 2013-08-10 17:03:34 · 1094 阅读 · 0 评论 -
STL系列之五heap
下面再介绍STL中与堆相关的4个函数——建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap():头文件 #include 下面的_First与_Last为可以随机访问的迭代器(指针),_Comp为比较函数(仿函数),其规则——如果函数的第一个参数小于第二个参数应返回true,否则返回false。建转载 2013-08-22 15:14:12 · 651 阅读 · 0 评论 -
SGI STL序列式容器list中的sort算法
STL的list容器提供了专有的sort算法,是一个以非递归形式的merge sort,虽然研究多时,无奈本人算法功底不济,本文权当抛砖引玉,望各路高手指点。代码:template class _Tp, class _Alloc>template class _StrictWeakOrdering>void list_Tp, _Alloc>::sort(_S转载 2013-08-18 17:20:44 · 761 阅读 · 0 评论 -
operator new,new operator和placement new的使用
在C++中new operator与operator new非一回事也,new operator(即所谓的new expression)乃语言内建,咱们是没法改变其行为的,当你写string *ps = new string("Hello World!")时,你所使用的new是所谓的new operator,它其实干了两件事:一、分配足够的内存(实际大小是大于所创建的对象大小)二、调用对象构造函数原创 2013-08-05 15:32:54 · 616 阅读 · 0 评论 -
STL中序列式容器之一vector
vector的数据安排以及操作方式,与array非常相似。两者的唯一差别在于array是静态分配,一旦配置就不能改变。而vector是动态空间分配,随着元素的加入,它的内部机制会自动扩展空间来容纳新元素。Vector实现的技术,关键在于其对大小的控制以及当空间重新配置时数据的移动效率。原创 2013-08-11 22:43:15 · 639 阅读 · 0 评论