第19章 queue队列容器

版权声明:转载商用请通知本人 https://blog.csdn.net/qq_41076577/article/details/85171228

第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(); //元素出队(删除队首元素)

}

猜你喜欢

转载自blog.csdn.net/qq_41076577/article/details/85171228