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 ----------
相关推荐
yujunl6 分钟前
U9系统admin用户账号密码生成Do方法
开发语言
MaikieMaiky13 分钟前
C++ STL 系列(一):string 容器详解与示例
开发语言·c++
之歆13 分钟前
DAY_25 JavaScript 原型、原型链与值类型/引用类型 ── 深度全解(下)
开发语言·javascript·ecmascript
段ヤシ.14 分钟前
回顾Java知识点,面试题汇总Day7(持续更新)
java·开发语言
努力努力再努力wz14 分钟前
【Qt入门系列】深入理解信号与槽:从事件响应到自定义信号机制
c语言·开发语言·数据结构·数据库·c++·qt·mysql
在角落发呆16 分钟前
DTU 数据转发服务器:工业物联网的隐形桥梁
开发语言·php
Sakuyu4346819 分钟前
C语言基础--基本数据类型
c语言·开发语言
在坚持一下我可没意见21 分钟前
Python 修仙修炼录 05:循环神通,省去无用苦修
开发语言·python·面试·入门·循环·复习
Hua-Jay33 分钟前
OpenCV联合C++/Qt 学习笔记(二十)----Harri角点检测、Shi-Tomas角点检测及亚像素级别角点位置优化
c++·笔记·qt·opencv·学习·计算机视觉
techdashen39 分钟前
Rust 社区在 4 月做了什么:项目管理月报解读
开发语言·rust·mfc