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 ----------
相关推荐
草莓熊Lotso17 分钟前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法
KyollBM23 分钟前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
海的诗篇_33 分钟前
前端开发面试题总结-JavaScript篇(二)
开发语言·前端·javascript·typescript
feiyangqingyun35 分钟前
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
c++·qt·udp·gb28181
CV点灯大师37 分钟前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
cccc来财1 小时前
Go中的协程并发和并发panic处理
开发语言·后端·golang
狐凄1 小时前
Python实例题:Python计算线性代数
开发语言·python·线性代数
惊鸿一博2 小时前
java_网络服务相关_gateway_nacos_feign区别联系
java·开发语言·gateway
Bruce_Liuxiaowei2 小时前
深入理解PHP安全漏洞:文件包含与SSRF攻击全解析
开发语言·网络安全·php
成工小白2 小时前
【C++ 】智能指针:内存管理的 “自动导航仪”
开发语言·c++·智能指针