deque
数据存储
- 使用map来存储数据,map为一个指向指针的指针。
- 所指向的指针为node(缓冲区)。
- 迭代器要维护start和finish两个迭代器,start指向第一个缓冲区(也即map中第一个node)的第一个元素,finish指向最后一个缓冲区的最后一个元素。
- 迭代器具有四个属性:cur,first,last,node
常用成员函数
- 构造函数
-
deque():创建一个空deque
-
deque(int nSize):创建一个deque,元素个数为nSize
-
deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t
-
deque(const deque &):复制构造函数
- 增加函数
-
void push_front(const T& x):双端队列头部增加一个元素X
-
void push_back(const T& x):双端队列尾部增加一个元素x
-
iterator insert(iterator it,const T& x):双端队列中某一元素前增加一个元素x
-
void insert(iterator it,int n,const T& x):双端队列中某一元素前增加n个相同的元素x
-
void insert(iterator it,const_iterator first,const_iteratorlast):双端队列中某一元素前插入另一个相同类型向量的[forst,last)间的数据
- 删除函数
-
Iterator erase(iterator it):删除双端队列中的某一个元素
-
Iterator erase(iterator first,iterator last):删除双端队列中[first,last)中的元素
-
void pop_front():删除双端队列中最前一个元素
-
void pop_back():删除双端队列中最后一个元素
-
void clear():清空双端队列中最后一个元素
- 遍历函数
-
reference at(int pos):返回pos位置元素的引用
-
reference front():返回手元素的引用
-
reference back():返回尾元素的引用
-
iterator begin():返回向量头指针,指向第一个元素
-
iterator end():返回指向向量中最后一个元素下一个元素的指针(不包含在向量中)
-
reverse_iterator rbegin():反向迭代器,指向最后一个元素
-
reverse_iterator rend():反向迭代器,指向第一个元素的前一个元素
- 判断函数
- bool empty() const:向量是否为空,若true,则向量中无元素
- 大小函数
-
Int size() const:返回向量中元素的个数
-
int max_size() const:返回最大可允许的双端对了元素数量值
- 其他函数
-
void swap(deque&):交换两个同类型向量的数据
-
void assign(int n,const T& x):向量中第n个元素的值设置为x
实现逻辑
- push_back(),push_front()
- pop_back(),pop_front()
- clear()
- insert(idx) 根据插入的位置,如果插入的位置靠近front(即idx<size/2),那么选择从前面开始移动,直到空出位置后进行插入,否则选择从后面进行移动插入。
- erase(idx) 和insert的逻辑类似。
queue
数据存储
- queue可以说是一种adapter,因为它是基于其它的容器实现的。
- queue有个重要的特点是它不能够被遍历,也就是只能获得其最早放入的元素。
- queue可以使用deque或者list这种双向开口的容器来进行实现。
常用成员函数
- front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
- back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
- push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
- push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
- pop():删除 queue 中的第一个元素。
- size():返回 queue 中元素的个数。
- empty():如果 queue 中没有元素的话,返回 true。
- emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
- swap(queue &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。