stl
文章平均质量分 69
xuwqiang1994
这个作者很懒,什么都没留下…
展开
-
SGI STL容器list源码解析
template < class T, class Alloc = allocator<T> > class list;list是一个序列容器,运行在任何位置进行常数时间插入和删除操作,并且可以双向迭代。list容器使用双向循环链表实现,与其他序列容器(array,vector,和deque)相比,list在指定位置插入,抽取,和移动元素表现更好,时间复杂度为O(1)...原创 2018-04-08 21:42:01 · 419 阅读 · 0 评论 -
SGI STL 迭代器解析
整理至侯捷《STL源码剖析》 迭代器是一种设计模式,现在编程语言基本都语言层面支持了这种模式,定义如下:提供一种方法,使之能遍历聚合物(容器)中的各个元素,而又不暴露聚合物内部的实现细节。 在STL中,迭代器在容器和算法之间扮演着桥梁的作用,算法通过迭代器访问容器中的数据。迭代器要实现下面几个功能:迭代器是一种智能指针迭代器要实现相应型别萃取机制由于算法中可能要用到用迭代...原创 2018-03-22 10:28:36 · 292 阅读 · 0 评论 -
STL deque源码剖析
deque(double-ended queue)是一种双向开口的序列容器,可以在头部和尾部进行push或pop操作,与vector不同,deque不是真正的连续线性空间,它是由分段连续空间动态组合而成。 map是一个二重指针,指向一个指针数组,数组中每个元素都为指针,指向各个相同大小的缓冲区,容器deque中的元素就放在这些缓冲区中,当map中的缓冲区满载后,就会配置一个新的map指向...原创 2018-04-10 13:13:06 · 296 阅读 · 0 评论 -
STL stack源码解析
整理至侯捷《STL源码剖析》 stack是一种后进先出(FILO)的数据结构,单向开口,只能在栈顶执行push、pop和top操作,不允许遍历。 STL中stack是以底层容器来实现的,所以称之为容器适配器(container adaptor)。 SGI将其实现在stl_stack.h头文件中,实现非常简单,不需要提供迭代器:template <class _Tp, ...原创 2018-04-11 11:41:35 · 1010 阅读 · 0 评论 -
STL queue和priority_queue源码解析
整理至侯捷《STL源码剖析》 STL中实现了先入先出(FIFO)队列和优先队列。要想使用只需包含< queue >头文件,SGI版本源码中将其实现在stl_queue.h头文件中。下面详细分析这两种队列: 先入先出队列 queue也和stack一样是一种容器适配器,底层采用其它容器适配而成。双向开口,只运行尾部插入元素,头部弹出元素,不允许遍历,则不需要实现迭代器,实现较简单...原创 2018-04-12 15:21:50 · 372 阅读 · 0 评论 -
SGI STL容器vector源码解析
vector是个序列容器,被称为动态数组,类似于C/C++中的数组,但是其空间能够动态变化。 使用只需要包含vector/vector.h头文件,但是SGI将其实现在stl_vector.h头文件。 实现如下:首先定义了vector基类_Vector_base,主要用于两个目的,首先,_Vector_base的构造器和析构器只分配空间单不初始化,这使得异常安全更容易;其次,封装了SGI风格...原创 2018-04-06 16:58:00 · 293 阅读 · 0 评论 -
SGI STL空间配置器解析
整理至侯捷的《STL源码剖析》 一般的C++内存配置操作为class Foo { ... };Foo *pF=new Foo;delete pF;new运算符包含两步操作:调用 ::operator new 配置内存调用 Foo 的构造函数构造对象delete运算符也包含两步操作:调用 Foo 的析构函数析构对象调用 ::operator delete 释放...原创 2018-03-14 19:29:13 · 159 阅读 · 0 评论