当前位置:   article > 正文

【C++】队列(queue)的使用_queue c++ 用法

queue c++ 用法

一、queue 简介

C++ 中,std::queue 容器是一种先进先出(First In First Out, FIFO)的数据结构,且有两个出口。

队列(queue)的结构如下:类似于生活中的排队买票,最先排队的人位于队伍最前端,后来的人依次从队伍末尾加入队伍。当队首的人买票成功后离开,原先位于第二位的人顶上成为新的队首,后续以此类推。

二、queue 构造函数

构造函数原型解释
1queue<T> que默认构造
2queue(const queue &que)拷贝构造

三、queue 赋值操作

函数原型:=解释
1queue& operator=(const queue &que)重载=操作符

四、queue 数据存取

函数原型:push、pop、back、front解释
1push(elem)向队尾添加元素
2emplace()向队尾添加元素
3pop()移除当前队首元素
4back()返回队尾元素
5front()返回队首元素

注意:

  • push与emplace区别详见 :push与emplace异同点
  • std::queue 不提供迭代器访问元素,只能通过 front()back() 来访问队列的第一个和最后一个元素。
  • std::queue 不支持随机访问,不能通过索引访问队列中的元素。
  • std::queue 的底层容器可以在创建时指定,例如使用 std::list 作为底层容器:std::queue<int, std::list<int>> myQueue;

五、queue 其他操作

函数原型:empty、size、swap解释
1empty()判断队列是否为空
2size()返回队列的大小
3swap(queue<T> & que)将当前队列中元素和que中元素交换

注意: swap()交换的两个队列中包含元素的类型必须相同。

示例:

#include <iostream>
#include <string>
#include <queue>       //必须包含该头文件
using namespace std;

class ObjNumber
{
public:
	string m_objName;
	int m_number;
public:
	ObjNumber(string name, int num)
	{
		m_objName = name;
		m_number = num;
	}
};

void test01()
{
	queue<ObjNumber> s1;
	ObjNumber obj1("茶叶", 1);

	s1.push(obj1);    //push必须填入实例化的对象

	s1.emplace(obj1); //emplace既可以填入实例化的对象
	s1.emplace("馒头", 2);  //emplace也可以填入构造函数的参数

	cout << "s1中元素数量为:" << s1.size() << endl;
	while (!s1.empty())
	{
		cout << "队首元素:" << s1.front().m_objName << endl;
		s1.pop();   //弹出队首元素
	}
}

int main()
{
	test01();
	system("pause");
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
//result
s1中元素数量为:3
队首元素:茶叶
队首元素:茶叶
队首元素:馒头
  • 1
  • 2
  • 3
  • 4
  • 5

六、queue 总结分析

注意:优劣是相对的,取决于具体的使用场景和需求。

优势:

  1. 简单易用:std::queue 提供了一组简单的接口函数,如 push()pop()front()empty() 等,使用起来非常方便。
  2. 高效性:std::queue 基于底层容器实现,通常使用 std::dequestd::list 作为默认的容器。这些容器都提供了高效的插入和删除操作,使得 std::queue 在大多数情况下具有良好的性能。
  3. 内存管理:std::queue 的底层容器会自动管理内存,当元素被弹出队列后,相关的内存也会被释放,无需手动管理内存。
  4. 无迭代器失效问题:由于 std::queue 的特性是先进先出,插入和删除操作只能在队尾和队首进行,因此不会导致迭代器失效的问题。

劣势:

  1. 功能受限:std::queue 只提供了队列的基本功能,即在队尾插入元素、在队首删除元素。如果需要在任意位置插入或删除元素,就需要选择其他容器,如 std::liststd::vector
  2. 不支持遍历:std::queue 不支持直接遍历队列中的元素,也无法通过索引访问队列中的特定元素。如果需要对队列进行遍历或随机访问元素,需要使用其他容器或将队列转换为其他容器进行操作。

总结:std::queue 是一个简单、高效的队列容器,适用于需要按照先进先出顺序处理元素的场景。它在插入和删除操作上具有良好的性能,且无需手动管理内存。然而,由于功能受限,如果需要在任意位置插入或删除元素,或需要遍历队列中的元素,就需要选择其他更适合的容器。


如果这篇文章对你有所帮助,渴望获得你的一个点赞!

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/777969
推荐阅读
相关标签
  

闽ICP备14008679号