C++ deque类
一、deque简介
“deque” 是简写形式, 其原意为 “double-ended queue”。 deque 模板类提供了对序列随机访问的功能,可以实现在序列两端快速插入和删除操作 的功能, 在需要时修改自身大小。 deque 型容器是典型的双端队列, 可以完成标准C++ 数据 结构中队列的所有功能。
- deque 是动态数组,在 STL 库的头文件 < deque >中
- deque 型容器和 vector 型容器的对比:
- 1) deque 可以在两端迅速插入和删除元素, 而 vector 只提供了成员函数 push_back( )和 pop_back()。
- 2) 存取元素时, deque 型容器会稍慢一些。
- 3) deque 型容器的迭代器是智能型指针。
- 4) 在内存区块受限制的系统中, deque 型容器可以包含更多元素, 因为它使用了多块 内存。
- 5) deque 型容器不支持对容器和内存重分配时机的控制。
- 6) deque 的内存区块不使用时, 会被释放。
- 7) 在序列中间插入和删除元素时, deque 的速度很慢, 需要移动相关的所有元素。
- 8) deque 型容器的迭代器属于随机存取迭代器。
二、deque 的定义和构造函数
-
无参,创建一个空双向队列
deque();
-
size - 创建一个大小为size的双向队列
deque( size_type size );
-
num and val - 放置num个val的拷贝到队列中
deque( size_type num, const TYPE &val );
-
from - 从from创建一个内容一样的双向队列
deque( const deque &from );
-
start 和 end - 创建一个队列,保存从start到end的元素
deque( input_iterator start, input_iterator end );
三、deque元素的存取和访问
(1)元素存取
-
pop_front()删除双向队列头部的元素
void pop_front();
-
pop_back()删除双向队列尾部的元素
void pop_back();
-
push_front()函数在双向队列的头部加入一个值为val的元素
void push_front( const TYPE &val );
-
push_back()函数在双向队列的尾部加入一个值为val的元素
void push_back( const TYPE &val );
(2)元素访问
-
顺序索引
- 使用[]操作符访问双向队列中单个的元素
- at()函数返回一个引用,指向双向队列中位置pos上的元素
reference at( size_type pos );
-
元素引用
-
front()函数返回一个引用,指向双向队列的头部
reference front();
-
back()返回一个引用,指向双向队列中最后一个元素
reference back();
-
-
迭代器相关
-
begin()函数返回一个迭代器,指向双向队列的第一个元素
iterator begin();
-
end()函数返回一个迭代器,指向双向队列的尾部
iterator end();
-
rbegin()返回一个指向双向队列尾部的逆向迭代器
reverse_iterator rbegin();
-
rend()返回一个指向双向队列头部的逆向迭代器
reverse_iterator rend();
-
四、deque容器的容量
-
empty()返回真如果双向队列为空,否则返回假
bool empty();
-
size()函数返回双向队列中的元素个数
size_type size();
-
resize()改变双向队列的大小为num,另加入的元素都被填充为val
void resize( size_type num, TYPE val );
五、deque基本操作
- 队列赋值
- assign()函数用start和end指示的范围为双向队列赋值
void assign( input_iterator start, input_iterator end);
- assign()函数设置成num个val
void assign( Size num, const TYPE &val );
- assign()函数用start和end指示的范围为双向队列赋值
- 清空队列
- clear()函数删除双向队列中所有元素
void clear();
- clear()函数删除双向队列中所有元素
- 删除元素
- erase()函数删除pos位置上的元素,返回值是一个iterator,指向被删除元素的后一个元素
iterator erase( iterator pos );
- erase()函数删除start和end之间的所有元素,返回值是一个iterator,指向被删除元素的后一个元素
iterator erase( iterator start, iterator end );
- erase()函数删除pos位置上的元素,返回值是一个iterator,指向被删除元素的后一个元素
- 插入元素
- insert()在pos前插入num个val值,该函数返回一个迭代器,该迭代器指向新插入的元素中的第一个
iterator insert( iterator pos, size_type num, const TYPE &val );
- insert()插入从start到end范围内的元素到pos前面
void insert( iterator pos, input_iterator start, input_iterator end );
- insert()在pos前插入num个val值,该函数返回一个迭代器,该迭代器指向新插入的元素中的第一个
- 交换队列
- swap()函数交换target和现双向队列中元素
void swap( deque &target );
- swap()函数交换target和现双向队列中元素