C++ queue队列容器

queue是队列容器,是一种“先进先出”的容器。
例如公共电话亭。必须有人出来,下一个才能进入。
如图:在这里插入图片描述

默认情况下queue是利用deque容器实现的一种容器。

它只允许在队列的前端(front)进行删除操作,而在队列的后端(back)进行插入操作。

使用queue需包含头文件#include <queue>

以上笔记来自腾讯课堂骑牛学院!


定义

queue采用模板类实现,queue对象的默认构造形式:queue< T > q1;

queue<int> q1;
queue<double> q2;
queue<char> q3;

// queue定义时默认使用deque作为他的存储对象,
queue<int, deque<int>q1;
// 也可以修改list容器。
queue<int, list<int>> q4;



queue<int> q5 = q1;		// 拷贝构造
queue<int> q6;
q6 = q1;			// 赋值运算符重载重载
queue<int> q7(q1);	// 拷贝构造

注意:不能修改为vector容器。


// 尾部插入
q1.push(1);

// 头部删除
q1.pop();

// 获取队首的值
q1.front();

// 获取队尾的值
q1.back();

// 获取容器中的元素个数
q1.size();

// 判断容器是否为空
q1.empty();

// 交换容器的元素
q1.swap(q2);


注意:queue队列容器没有迭代器,所以,想要输出里面的所有值,唯有以下方法:

while (!q2.empty()) {			// 如果不为空则继续执行
	cout << q2.front() << " ";	// 输出队列头部的值
	q2.pop();					// 队列头部出队
}
cout << endl;

测试代码:

#include <iostream>
#include <Windows.h>
#include <queue>
#include <list>

using namespace std;

// 定义
void test1(void) {
	queue<int> q1;
	queue<double> q2;
	queue<char> q3;

	// queue定义时默认使用deque作为他的存储对象,
	// 也可以修改list容器。注意:不能修改为vector容器。
	queue<int, list<int>> q4;


	queue<int> q5 = q1;	
	queue<int> q6;
	q6 = q1;	// =重载
	queue<int> q7(q1);	// 拷贝构造
}

// 头部删除与尾部增加
void test2(void) {
	queue<int> q1;

	// 尾部插入
	q1.push(1);
	q1.push(2);
	q1.push(3);
	
	// 头部删除
	q1.pop();

	// 获取队首的值
	int front = q1.front();	

	// 获取队尾的值
	int back = q1.back();

	cout << "队首:" << front << " 队尾:" << back << endl;

	// 可以直接修改队首和队尾的值
	q1.front() = 111;
	q1.back() = 222;

	cout << "队首:" << q1.front() << " 队尾:" << q1.back() << endl;
}

// empty 与 size
void test3(void) {
	queue<int> q1;
	queue<int> q2;

	q1.push(1);
	q1.push(2);
	q1.push(3);

	// 获取容器中的元素个数
	q1.size();

	// 判断容器是否为空
	q1.empty();

	if (!q1.empty()) {
		cout << "容器个数:" << q1.size() << endl;
	} else {
		cout << "容器为空!" << endl;
	}

	// 交换容器的元素
	q1.swap(q2);


	while (!q2.empty()) {			// 如果不为空则继续执行
		cout << q2.front() << " ";	// 输出队列头部的值
		q2.pop();					// 队列头部出队
	}
	cout << endl;
}

int main(void) {
	//test1();

	//test2();

	test3();

	system("pause");
	return 0;
}

STL其他容器学习链接:

  1. C++ map 和 multimap 容器

  2. C++ set 和 multiset 容器

  3. C++ list容器

  4. C++ deque容器

  5. C++ vector容器

发布了47 篇原创文章 · 获赞 37 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/cpp_learner/article/details/104855954