![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL源码剖析
文章平均质量分 85
ZH_learningblog
To be best me!
展开
-
STL源码剖析之空间配置器Allocator
Object a = new Object(); delete a; 一般地,对象的构造过程包含两步:(1)调用运算符new进行空间分配;(2)调用构造函数构造对象内容。对象的析构函数也包含两步:(1)调用对象的析构函数;(2)调用运算符delete释放内存。 STL中内存操作由alloc:allocate()完成,它是对运算符new的封装,内存释放由alloc:deallo原创 2017-02-28 19:29:00 · 489 阅读 · 0 评论 -
STL源码剖析之迭代器Iterator
在设计模式中,迭代器的定义如下:提供一种方法能够依次访问聚合元素而又无需暴露内部的表达方式。由于STL标准库中的设计将容器与算法相互分隔开,迭代器扮演之间的粘合剂。 一、设计原理 STL中迭代器为智能指针(smart pointer),指针具有的行为有->和*,因此迭代器会重载operator->和operator*。STL中有个auto_ptr原生指针可供参考学习。 二、auto_ptr原创 2017-03-01 16:43:05 · 435 阅读 · 0 评论 -
STL源码剖析之序列式容器vector
一、定义 vector底层是动态分配的数组,随着元素的增加,内部机制会自动扩充空间以容纳新的元素。原创 2017-03-01 20:29:09 · 462 阅读 · 0 评论 -
STL源码剖析之数值算法<numeric.h>
一、accumulate 作用:初始化init,对区间[first,last)的迭代器i执行init += *i或init = binaryop(init,*i)。 template //版本1,用来计算init和[first,last)区间元素的总和 _Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __in原创 2017-03-08 15:41:04 · 473 阅读 · 0 评论 -
STL源码剖析之基本算法<stl_algobase.h>
一、equal 作用:判断[first,last)区间两个元素是否相同,第二个迭代器多出来的元素不予考虑。 template //版本1 inline bool equal(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2) { for ( ; __first1 != __la原创 2017-03-08 15:48:38 · 437 阅读 · 0 评论 -
STL源码剖析之序列容器deque
一、定义 deque是两端都可以插入删除的线性表。 图示: deque与vector的区别: (1)deque两端都可已插入删除,vector只在尾端插入删除; (2)deque没有容量的概念,它是由分段连续空间组成的,随时可以增加一个新的空间并连接起来,vector为连续的内存可增长的地址空间。 二、deque数据结构 deque采用一小段的map作为主控,每个元素都是一个原创 2017-03-02 20:03:58 · 421 阅读 · 0 评论 -
STL源码剖析之序列容器list
一、定义 容器list的特点是每次插入一个元素就配置一个空间,每次删除一个元素就释放一个空间。结构定义如下: struct _List_node_base { _List_node_base* _M_next;//后继指针 _List_node_base* _M_prev;//前驱指针 }; template struct _List_node : public _List_nod原创 2017-03-02 18:36:45 · 334 阅读 · 0 评论 -
STL源码剖析之traits编程技巧
在迭代器中,不同数据结构都有其专属的迭代器,不同的迭代器具有不同属性,算法根据迭代器的不同属性自动的选择执行,这其中技术由traits编程技术完成的,它是通过“内嵌类型”与C++template参数推导功能,解决C++类型识别问题。 迭代器所指向对象的型别成为迭代器的value_type。 //内嵌型别处理 template class Iterator { public: typede原创 2017-03-01 19:04:45 · 394 阅读 · 0 评论