【STL】Deque - 双向队列
Deque简介
Deque是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。允许快速地访地随机访问,但是和vector这种将所有对象保存在一块连续的内存块不同,Deque是采用多个连续的存储块,并且在一个映射结构中保存对这些块及顺序的跟踪。向deque两端添加或删除元素的开销很小。它不需要重新分配空间,所以向末端增加元素相比vector更有效。
Deque更像是对vector和list优缺点的结合,是处于两者之间的一种容器。
特点:
(1)方便随机访问,支持[]操作符和deque.at();
(2)可以在内部进行插入和删除操作;
(3)可以在两端进行push、pop;
(4)相对于vector占用更多的内存
Deque和Vector很像,Deque允许在容器头部快速的插入和删除,就像在尾部一样
Deque的类方法
1.Constrcutors:构造一个新双向队列
deque(); // 创建一个空的双向队列
deque(size_type size); //创建一个大小为size的双向队列
deque(size_type num,const TYPE &val); // 放置num个val拷贝到队列中
deque(const deque &from); // 从from创建一个与from内容一直的双向队列
deque(input_iterator start,input_iterator end); // 从start到end创建一个队列,保存从start到end的元素
2.Operators:比较和赋值双向队列
// 访问指定位置的元素
operators[]
3.assign():设置双向队列的值
// start和end指示的范围为双向队列赋值
void assign(input_iterator start,input_iterator end);
// 设置成num个val
void assign(Size num,const TYPE &val);
4.at():返回制定的元素
5.back():返回最后一个元素
6.begin() : 返回第一个元素的迭代器
// 返回一个迭代器,指向双向队列的第一个元素
interator begin();
7.clear():删除所有元素
8.empty():判断deque是否为空
9.end():返回指向尾部的迭代器
10.erase():删除一个元素
// 删除pos的位置上的元素
iterator erase(iterator pos);
// 删除start和end之间所有的元素
iterator erase(iterator start,iterator end);
11.front():返回第一个元素的引用
12.get_allocator(): 返回双向队列的配置器
13.insert():插入一个元素到双向队列中
// pos前插入num个val值
iterator insert(iterator pos,size_type num,const TYPE &val);
// 插入从start带end范围内的元素到pos前面
void insert(iterator pos,input_iteraotr start,input_iterator end);
14.max_size():返回双向队列能容纳的最大元素个数
15.pop_back():移除尾部的一个元素
16.pop_front():移除头部的一个元素
17.push_back():在尾部加入一个元素
18.push_front():在头部加入一个元素
19.rbegin():返回指向尾部的逆向迭代器
20.rend():返回指向头部的逆向迭代器
21.resize():改变双向队列的大小
22.size():返回双向队列中元素的个数
23.swap():和另一个双向队列交换元素
// 交换target和现双向队列中元素
void swap(deque &target);
参考文章:C++_标准模板库(STL) - Deque