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 ----------
相关推荐
W.A委员会7 小时前
JS原型链详解
开发语言·javascript·原型模式
止语Lab8 小时前
Go并发编程实战:Channel 还是 Mutex?一个场景驱动的选择框架
开发语言·后端·golang
她说彩礼65万8 小时前
C# 实现简单的日志打印
开发语言·javascript·c#
绿浪19848 小时前
c# 中结构体 的定义字符串字段(性能优化)
开发语言·c#
房开民8 小时前
可变参数模板
java·开发语言·算法
t***5449 小时前
如何在现代C++中更有效地应用这些模式
java·开发语言·c++
itman3019 小时前
C语言、C++与C#深度研究:从底层到现代开发演进全解析
c语言·c++·c·内存管理·编译模型
Victoria.a10 小时前
python基础语法
开发语言·python
xiaoyaohou1111 小时前
023、数据增强改进(二):自适应数据增强与AutoAugment策略
开发语言·python
鬼圣11 小时前
Python 上下文管理器
开发语言·python