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

这篇具有很好参考价值的文章主要介绍了【C++】队列(queue)的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、queue 简介

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

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

二、queue 构造函数

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

三、queue 赋值操作

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

四、queue 数据存取

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

注意:

  • 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 解释
1 empty() 判断队列是否为空
2 size() 返回队列的大小
3 swap(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;
}
//result
s1中元素数量为:3
队首元素:茶叶
队首元素:茶叶
队首元素:馒头

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


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

c++ queue,C++,容器,c++,开发语言,数据结构文章来源地址https://www.toymoban.com/news/detail-701031.html

到了这里,关于【C++】队列(queue)的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ 优先队列 priority_queue 使用篇

    目录 1.储备知识    (1)数据结构:堆   (2)仿函数(函数对象)     [1]理解仿函数     [2]实现仿函数   (3)priority_queue理解     [1]什么是priority_queue (优先队列)?     [2]优先队列性质 2.priority_queue的参数理解(重要!!!)   (1)priority_queue的参数     [1]priority_queue类模板参数     [

    2024年03月12日
    浏览(81)
  • 【C++】栈和队列(stack and queue)语法使用及实现原理

         本篇文章会对C++中的容器stack和queue用法进行详解,也包含对优先队列(priority_queue)的讲解。同时会模拟实现stack、queue和priority_queue底层。希望本篇文章会对你有所帮助! 目录 一、stack 栈 1、1 什么是适配器 1、2 stack 语法讲解 1、3 stack 底层实现 1、4 deque 双端队列简单

    2024年02月15日
    浏览(36)
  • C++——优先级队列(priority_queue)的使用及实现

    目录 一.priority_queue的使用 1.1、基本介绍 1.2、优先级队列的定义 1.3、基本操作(常见接口的使用) 1.4、重写仿函数支持自定义数据类型 二.priority_queue的模拟实现 2.1、构造重要的调整算法 2.2、常见接口的实现 push() pop() top() empty()、size()  三.利用仿函数改进调整算法 我们之前

    2024年02月02日
    浏览(39)
  • C++ 栈和队列(stack and queue)语法使用及底层实现原理

         本篇文章会对C++中的容器stack和queue用法进行详解,也包含对优先队列(priority_queue)的讲解。同时会模拟实现stack、queue和priority_queue底层。希望本篇文章会对你有所帮助! 目录 一、stack 栈 1、1 什么是适配器 1、2 stack 语法讲解 1、3 stack 底层实现 1、4 deque 双端队列简单

    2024年02月13日
    浏览(34)
  • STL容器适配器 -- stack和queue(使用+实现)(C++)

    栈和队列数据结构+画图分析如果对栈和队列的结构不了解的,可以先看该链接的内容 使用stack时需要头文件 #includestack stack是一种容器适配器,用于具有 后进先出 (LIFO)的环境中。只能从容器的一端(栈顶),执行删除、插入和提取操作。 stack是作为容器适配器实现的,容器

    2024年02月14日
    浏览(61)
  • 【C++】STL使用仿函数控制优先级队列priority_queue

    本文章讲解C++STL的容器适配器:priority_queue的实现,并实现仿函数控制priority_queue底层。 priority_queue叫做优先级队列,它的底层结构是堆,在库中,默认生成的是大堆 在库的实现中,使用vector作为该优先级队列的适配容器。 由于priority_queue也是一个适配器,所以它的接口函数

    2024年02月16日
    浏览(43)
  • 【C++】STL中stack,queue容器适配器的模拟实现(使用deque容器)

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和

    2024年02月15日
    浏览(50)
  • [数据结构 -- C语言] 队列(Queue)

    目录 1、队列 1.1 队列的概念及结构 2、队列的实现 2.1 接口 3、接口的实现 3.1 初始化队列 3.2 队尾入队列 分析: 3.3 队头出队列 分析: 3.4 获取队列头部元素 3.5 获取队列尾部元素 3.6 获取队列中有效元素个数 3.7 检测队列是否为空 3.7.1 int 类型判空 3.7.2 bool 类型判空 3.8 销毁队

    2024年02月07日
    浏览(42)
  • 【C++】STL之容器适配器——使用deque适配stack和queue

    个人主页:🍝在肯德基吃麻辣烫 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处。 本文章主要介绍容器适配器的功能,以及一个适配的场景。 容器适配器,按字面意思理解的话,就是用来对一个容器进行匹配的。在C++STL中,容器有:vector,list,deque,map,set等。

    2024年02月16日
    浏览(54)
  • C++的stack和queue+优先队列

    适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总 结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 stack和queue都是容器适配器,底层都是通过去适配双端队列deque去实现的,STL中没有把stack和queue划分在容

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包