首先我们先简单说明c++的双向队列
c++的双向队列比队列具有更加灵活的特性,可以对队列中两端的元素进行操作。
包含文件为 #include<deque>
声明为: deque<type> d; type为声明的变量类型,其中d为声明的变量名
常见的操作有以下几种方式:
push_back: 从尾部添加元素
push_front: 从头部添加元素
pop_back: 从尾部删除元素
pop_front: 从头部删除元素
insert: 插入一个元素
erase 删除一个元素
更加具体的函数可以参考c++的官方网站对于deque的说明:
http://www.cplusplus.com/reference/deque/deque/?kw=deque
下面我们来看一下这里例子,这里具体的说明如何使用上面的函数,程序里具体说明了每一步的解释:
#include<iostream>
#include<deque>
using namespace std;
int main()
{
deque<int> d;
//从尾部插入0到4
for (int i = 0; i < 5; i++)
{
d.push_back(i);
cout << i << " ";
}
//从头部插入20到16
for (int i = 20; i>15; i--)
{
d.push_front(i);
cout << i << " ";
}
cout << endl;
//现在双向队列中按从头到位的顺序为16 17 18 19 20 0 1 2 3 4
//输出双向队列中的所有元素
cout << "按照一头一尾的方式输出双向队列中的所有元素" << endl;
//正确的输出结果应该是16 4 17 3 18 2 19 1 20 0
while (!d.empty())
{
cout << d.front() << " ";
d.pop_front();
cout << d.back() << " ";
d.pop_back();
}
cout<<endl;
deque<int>::iterator it = d.begin();
//删除了所有元素以后我们重新对双向队列赋值
for (int i = 0; i < 10; i++)
{
d.push_back(i);
}
//输出现在队列中的元素
for (it = d.begin(); it != d.end(); it++)
{
cout <<*it << " ";
}
cout << endl;
//接下来我们演示在第3个元素中插入5个10,然后删除倒数第2个元素
it = d.begin();//让it指向第三个元素
d.insert(it+2,5,10);//这里的5代表插入的元素个数
it = d.end();
d.erase(it - 2);//删除倒数第二个元素
//查看现在双向队列中的元素
for (it = d.begin(); it != d.end(); it++)
{
cout <<*it << " ";
}
system("pause");
return 0;
}
下面是对应的输出截图: