C++ deque实现

deque是序列式容器中设计难度最大的容器,主要原因在于其特殊的数据结构和配套的迭代器设计(从deque的设计中可以看出每种容器只能由自己来设计迭代器)。

其内部首先以一块连续的空间作为map,map内的每个node指向一块连续的缓冲区,这些连续的缓冲区才是真正存放数据的位置,初始状态是它维护一个空的缓冲区,当一块缓冲区满时,需要申请一块新的缓冲区,并通过map内的一个node记录其位置,当map满时需要reallocate_map,即更换一块更大的map。由于deque内部是段式连续空间,对外表现为逻辑上的连续空间任务就交给了deque的迭代器(迭代器支持随机访问),迭代器的设计变得复杂,迭代器内部维护4个指针,node指向map中记录当前迭代器所在缓冲区的node,这是因为当迭代器需要跨缓冲区移动时它必须要通过map找到下一块缓冲区在哪,first指向当前元素所在缓冲区的第一个位置,last指向当前元素所在缓冲区最后一个位置的下一位置,cur指向缓冲区中当前迭代器所指元素的位置,通过它提领迭代器所指元素

代码实现:https://github.com/inmail/mySTL/blob/master/mySTL/6stl_deque.h

你可能感兴趣的:(C/C++)