C++系列-STL容器之queue

STL容器之queue


渔父·一棹春风一叶舟 - 五代·李煜

一棹春风一叶舟,一纶茧缕一轻钩。花满渚,酒满瓯,万顷波中得自由。


queue容器的概念

  • queue容器是一种先进先出的数据结构FIFO(first in first out),它有两个出口。
  • queue一端允许一端进入元素,称为队尾,允许一端移除元素,称为队头,这特别像排队的情形。
  • queue中进数据称为入队,用push接口。
  • queue中出数据称为出队,用接口pop。

queue容器构造函数和常用接口

queue的构造函数

  • queue q1,默认构造
  • 使用已有的容器构造,这个容器必须支持front,back,push_back,pop_front,通常可以使用deque和list。
  • queue q2(q1)拷贝构造函数。

queue的常用接口

函数原型 用途
push() 往队尾添加元素
pop() 从队头移除第一个元素
front() 返回第一个元素
back() 返回最后一个元素
empty() 判断queue是否为空
size() 判断queue是否为空
swap() 两个queue交换
cpp 复制代码
code:
#include <iostream>
#include <queue>
#include <deque>
using namespace std;

template<typename T>
void print_pop_stack(queue<T>& que)		// 这里不能用const,因为内部pop改变了stack
{
	while (!que.empty())			// 判断queue是否为空
	{
		cout << que.front() << " ";	// 返回第一个元素
		que.pop();					// 从队头移除第一个元素
	}
	cout << endl;
}

void test01()
{
	deque<int> deq1{1, 2, 3};
	queue<int> q1(deq1);			// 使用已有容器构造
	q1.push(10);
	q1.push(20);
	q1.push(30);
	queue<int> q2(q1);				// 拷贝构造

	cout << "\n---------- q1 ----------" << endl;
	cout << "q1.size(): " << q1.size() << endl;
	print_pop_stack<int>(q1);
	cout << "print_pop_stack后的q1.size(): " << q1.size() << endl;

	cout << "q2.size(): " << q2.size() << endl;
	cout << "q2.back():" << q2.back() << endl;	

	q2.swap(q1);
	cout << "q2.size(): " << q2.size() << endl;
	cout << "\n----------q2.swap(q1)后的q1 ----------" << endl;
	print_pop_stack<int>(q1);

	queue<int> q3;
	q3 = q1;		// queue中的=并未进行重载,无法直接赋值
	cout << "\n---------- q3 = q1后的q1 ----------" << endl;
	print_pop_stack<int>(q1);
}
int main()
{
	test01();
	system("pause");
	return 0;
}

result:

---------- q1 ----------
q1.size(): 6
1 2 3 10 20 30
print_pop_stack后的q1.size(): 0
q2.size(): 6
q2.back():30
q2.size(): 0

----------q2.swap(q1)后的q1 ----------
1 2 3 10 20 30

---------- q3 = q1后的q1 ----------
相关推荐
技术砖家--Felix34 分钟前
Spring Boot入门篇:快速搭建你的第一个Spring Boot应用
java·开发语言·音视频
国服第二切图仔37 分钟前
Rust开发之使用Trait对象实现多态
开发语言·算法·rust
Yolo566Q41 分钟前
Python驱动的无人机生态三维建模与碳储/生物量/LULC估算全流程实战技术
开发语言·python·无人机
我不是程序猿儿1 小时前
【C#】XtraMessageBox(DevExpress)与MessageBox(WinForms 标准库)的区别
开发语言·c#
玖笙&1 小时前
✨WPF编程进阶【6.1】:图形原则(附源码)
c++·c#·wpf·visual studio
s砚山s1 小时前
代码随想录刷题——二叉树篇(一)
c++·算法·leetcode
含目的基因的质粒2 小时前
Python异常、模块、包
服务器·开发语言·python
AC是你的谎言2 小时前
HTTP和HTTPS
linux·网络·c++·网络协议·学习·http·https
千码君20163 小时前
Go语言:解决 “package xxx is not in std”的思路
开发语言·后端·golang
Ypuyu3 小时前
【GoLang】【框架学习】【GORM】4. 使用 BeforeUpdate hook 操作时,出现反射报错
开发语言·学习·golang