什么是deque ?
deque是C++标准模板库(STL)中的一个容器,代表“双端队列”(double-ended queue)。deque
支持在其前端(front)和后端(back)进行快速插入和删除操作,并且它在序列的中间插入和删除元素时通常比vector
或list
更高效。
deque的特点
- 双端插入和删除:你可以在
deque
的头部和尾部快速地添加或移除元素,时间复杂度为O(1)。 - 随机访问:与
vector
类似,你可以通过索引(即下标)直接访问deque
中的任何元素,时间复杂度也为O(1)。 - 动态数组:
deque
是一个动态数组,它可以根据需要增长或缩小。 - 内部实现:虽然
deque
在外部接口上看起来像一个连续的内存块,但它的内部实现可能不同。它通常是由多个固定大小的内存块组成,这些内存块以某种方式链接在一起,以便在需要时能够动态地分配和释放内存。 - 迭代器稳定性:在
deque
的头部或尾部插入或删除元素时,指向容器其它部分的迭代器仍然有效。但是,如果你在中间插入或删除元素,指向这些元素的迭代器可能会失效。
下面我们依旧从stl的六个方面来学习
容器和迭代器
template<class T>
class deque //双端队列
{
protected:
iterator start;
iterator finish;
map_pointer map; //二级指针,指向内存块地址数组的指针
size_t map_size; //内存块的个数吧
};
template<class T,class ref,class pointer,size_t buf_size> buf_size 是内存块的大小
{
T* cur; //尾部迭代器指向元素的pointer
T* first; //当前内存块的起始地址
T* last; //尾部
map_pointer node; //当前迭代器所在的内存块
}
从上面代码我们可以看到在deque中有 begin迭代器,end