双端队列容器是一种放松了访问权限的队列。除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问。
它提供了直接访问和顺序访问方法。其头文件为<deque>。
1)双端队列容器的构造函数
有4中形式的构造函数:
deque();//构造size()为0的双端队列容器
deque(size_type n,const T& v=T());//初始化大小为n的双端队列,第二个参数是每个元素的初始值,默认为T()构造的对象
deque(const deque& x);//拷贝构造函数,用双端队列x来初始化此双端队列容器
deque(const_iterator first,const_iterator last);//从另一个支持const_iterator的容器中选取一部分来建立一个新的双端队列容器。
2)使用双端队列容器
a、访问双端队列容器信息
对于双端队列容器,
size()返回双端队列容器中元素的个数;
max_size()返回双端队列容器中最多可以容纳元素的个数;
empty()当双端队列中没有元素时,则返回true
b、向双端队列容器中放置元素
有以下方法可以把元素放入双端队列容器中:构造函数、push_back()方法、insert()方法、[]运算符、=运算符、swap函数。还有push_front函数,其原型为:
void push_front(const T& x);//将元素x添加在双端队列容器头部
c、删除双端队列容器中的元素
使用pop_back()、pop_front()、erase()、clear()可以从双端队列中删除元素,与向量容器相比,多了一个pop_front()函数,其原型:
void pop_front();//删除双端队列容器中的最前端元素
d、访问双端队列容器中的元素
双端队列容器即可以顺序访问也可以直接访问。双端队列容器中的元素可以联合使用pop_front()、pop_back()、front()、back()成员函数进行顺序访问,也可以使用迭代器来顺序遍历双端队列。由于支持随机访问迭代器,所以可以进行随机访问。
e、例子
使用双端队列容器保存双精度数值序列
#include<iostream>
#include<deque> //包含双端队列容器头文件
#include<algorithm>//包含算法头文件
#include<iterator>
using namespace std;
int main()
{
deque<double> values;//声明一个双精度型deque序列容器
ostream_iterator<double> output(cout," ");
values.push_front(2.2);//应用函数push_front在deque容器开头插入元素
values.push_front(3.5);
values.push_back(1.1);//应用函数push_back在deque同期结尾插入元素
cout << "values contains:";
for (int i = 0; i < values.size(); ++i)
cout << values[i] << ' ';
values.pop_front();//应用函数push_front从deque容器中删除第一个元素
cout << "\nafter pop_front values contains:";
copy(values.begin(),values.end(),output);
values[1] = 5.4;//用用操作符[]来重新赋值
cout << "\nafter values[1]=5.4 values contains:";
copy(values.begin(), values.end(), output);
getchar();
cout << endl;
}