第19章 queue队列容器
queue队列也是一个线性存储表,与后进先出的堆栈不同,元素数据的插入在表的一段进行,在另一段删除,从而构成了一个先进先出FIFO(First In First Out)表。插入一段称为队尾,删除一段称为队尾。
由于C++ STL的队列泛化,默认使用双端队列deque来实现,因此,queue也可以看成一个容器适配器,将deque容器转换为queue容器。当然,也可以利用其他合适的序列容器作为底层实现queue容器。
19.1queue技术原理
←出列 | a0 | a1 | … | an-1 | an | 入列← | |
---|---|---|---|---|---|---|---|
队首 | 队尾 |
SGI C++ STL对queue队列的泛化,是通过模板类型,将默认的deque双端队列类型导入,在内部创建一个序列容器对象,来处理queue队列的数据储存和操作,包括queue队列是否为空,取队首元素,取队尾元素,元素入队和元素出队等。
(1)默认构造函数创建queue对象
``queue q;`
(2)复制构造函数queue(const queue&)
复制构造函数,用一个queue对象创建新的queue对象,
queue<int,int <list> > q1;
queue<int, int <list>> q2(q1);
【获取queue队列的所有元素】
#include<queue>
#include<iostream>
using namespace std;
int main(){
queue<int> q;
q.push(3);
q.push(19);
q.push(29);
q.push(26);
q.push(33);
//元素出队
while (!q.empty())
{
cout << q.front() << endl; //打印队首元素
q.pop(); //删除队首元素
}
system("pause");
return 0;
}
元素入队
queue队列容器的元素入队函数也是push函数。由于C++STL的queue队列不预设固定的队列大小,因此push函数也就不判断队列空间是否已为满,都会试图将元素放入队列,因此push函数不反返回元素入队是否成功的消息
``void push(const value_type& x)`
元素入队,将元素x放入queue队列,称为新的队尾元素
元素出队
queue队列容器的元素出队函数为pop函数。函数不判断队列是否已为空,都试图将队首元素删除掉。一般先判断队列不为空,才使用该函数进行元素出队操作。如下是pop函数的使用原型。
void pop()
下面的示例代码将queue队列的所有元素全部出队,直到队列没有任何元素
//queue<int> q;
while(!q.empty()) {
q.pop(); //元素出队(删除队首元素)
}