C++之队列queue

news2025/1/22 9:12:39

1.知识百科

  队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
  队尾(rear):只能从队尾添加元素,一般焦作enQueue,入队
  队头(front):只能从队头移除元素,一般焦作deQueue,出队
  先进先出的原则、First In Fist Out,FIFO(跟栈是反的,栈是后进先出)
  在生活中队列案例也是随处可见。例如火车站排队买票,银行排队办理业务。

在这里插入图片描述

2.C++队列容器queue

  队列只需要从对尾插入数据(入队,push_back),对头取数据(出队,pop_front);
  队列只能访问对头和队尾数据,其他数据需要出队才能访问,所以不存在遍历队列;
  返回队列头数据:front()
  返回队列尾数据:back()

2.1 queue构造函数

  • 默认构造
       queue que
  • 拷贝构造函数
      queue(const queue &que)

2.2 入队和出队函数

  • 入队
      push()
      emplace()
  • 出队
      pop()

2.3 其他相关函数

  • 获取队列头数据
      front()
  • 获取队列尾数据
      back()
  • 判断队列是否为空
      empty();
  • 获取队列中元素个数
      size();
  • 互换元素:
      swap();

注意:queue容器不支持随机访问,不能通过下标访问元素;不支持迭代器访问元素,仅能通过front和back来访问一个元素和最后一个元素;

3.C++队列使用示例

3.1示例1:使用内置数据类型

#include <iostream>
#include <queue>
using namespace std;
void test()
{
	queue<int> q;
	//入队
	q.push(10);
	q.push(20);
	q.push(30);
	q.emplace(40);//从队列尾插入数据
	cout << "队列中成员个数:" << q.size() << endl;
	while (!q.empty())//判断队列是否为空
	{
		cout << "队列头:" << q.front() << "\t队列尾:" << q.back() << endl;
		q.pop();//出队
	}
	cout << "队列中成员个数:" << q.size() << endl;
	
}
int main()
{
	test();
	system("pause");
}

在这里插入图片描述

3.2示例2:使用构造数据类型

#include <iostream>
#include <queue>
#include <stdlib.h>
using namespace std;
class Person
{
public:
	int age;
	string name;
	//构造函数
	Person(int age,string name):age(age),name(name){
	}
};
//重载<<
ostream& operator<<(ostream&,Person p)
{
	cout<<"姓名:"<<p.age<<"\t"<<"年龄"<<p.name;
	return cout;
}
void test()
{
	queue<Person> q1;
	queue<Person> q2;
	//入队操作
	q1.emplace(12,"小王");
	//q1.push(13,"小刘");//错误,push需要实例化对象
	q1.push(Person(13,"小刘"));
	Person p(25,"阿水");
	q1.emplace(p);//emplace既可以直接填构造函数形参,也可以实例化对象填入
	//q2入队操作
	q2.push(p);
	q2.emplace(25,"安安");
	cout<<"队列q1成员个数:"<<q1.size()<<endl;
	cout<<"队列q2成员个数:"<<q2.size()<<endl;
	//交换
	cout<<"交换成员后:"<<endl;
	q1.swap(q2);
	cout<<"队列q1成员个数:"<<q1.size()<<endl;
	cout<<"队列q2成员个数:"<<q2.size()<<endl;
	//q1出队
	cout<<"q1出队:"<<endl;
	while(!q1.empty())
	{
		cout<<"q1队列头内容:"<<q1.front()<<endl;
		cout<<"q1队列尾内容:"<<q1.back()<<endl;
		cout<<endl;
		
		q1.pop();//出队
	}
	//q2出队
	cout<<"q2出队:"<<endl;
	while(!q2.empty())
	{
		cout<<"q2队列头内容:"<<q2.front()<<endl;
		cout<<"q2队列尾内容:"<<q2.back()<<endl;
		cout<<endl;
		q2.pop();//出队
	}
}
int main()
{
	test();
	system("pause");
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea - Apifox Helper 插件的安装、配置令牌、导出

第一步&#xff1a;先安装插件&#xff08;其他EASY API 、Api docx同理&#xff09; 等待安装完毕 第二步&#xff1a; 导出你想导出的API 提示我们没有找到配置文件&#xff0c;需要到设置里面设置Personal Access Token 第三步&#xff1a;到设置里面设置Personal Access T…

AI:50-基于深度学习的柑橘类水果分类

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

城市内涝解决方案:实时监测,提前预警,让城市更安全

城市内涝积水问题是指城市地区在短时间内遭遇强降雨后&#xff0c;地面积水过多&#xff0c;导致城市交通堵塞、居民生活不便、财产损失等问题。近年来&#xff0c;随着全球气候变化和城市化进程的加速&#xff0c;城市内涝积水问题越来越突出&#xff0c;成为城市发展中的一大…

C++之初始化列表详细剖析

一、初始化列表定义 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个"成员变量"后面跟一个放在括号中的初始值或表达式。 class Date { public:Date(int year, int month, int day): _year(year), _month(mont…

tauri 访问静态资源,响应头为Content-Type:‘text/html‘

现象 报错&#xff1a; Error: THREE.FBXLoader: Unknown format. at FBXLoader.parse (index-f8291142.js:22050:15) at Object.onLoad (index-f8291142.js:22033:22) at index-f8291142.js:19769:20 使用threejs 加载fbx模型文件时&#xff0c;返回头中Content-…

《C++ Primer》第6章 函数(一)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 6.1 函数基础&#xff08;P182&#xff09; 典型的函数定义包括&#xff1a;返回类型&#xff08; return type &#xff09;、函数名字、0 个或多个形参&#xff08; parameter &#xff09;组成的列表、函…

使用HttpClient库的爬虫程序

使用HttpClient库的爬虫程序&#xff0c;该爬虫使用C#来抓取内容。 using System; using System.Net.Http; using System.Threading.Tasks; ​ namespace CrawlerProgram {class Program{static void Main(string[] args){// 创建HttpClient对象using (HttpClient client new…

数据结构 - 顺序表ArrayList

目录 实现一个通用的顺序表 总结 包装类 装箱 / 装包 和 拆箱 / 拆包 ArrayList 与 顺序表 ArrayList基础功能演示 add 和 addAll &#xff0c;添加元素功能 ArrayList的扩容机制 来看一下&#xff0c;下面的代码是否存在缺陷 模拟实现 ArrayList add 功能 add ind…

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第七章 muduo编程示例(上)

本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下&#xff1a; 1.[UNP]中的五个简单协议&#xff0c;包括echo、daytime、time、discard、chargen等。 2.文件传输&#xff0c;示范非阻塞TCP网络程序中如何完整地发送数据。 3.Boost.Asio中的示例&#xff0c;…

新手学习两种不同的存储方式(不喜勿喷)

localStorage.setItem(sid,res.info.id)console.log(sid,res.info.id)sessionStorage.setItem(uid,res.info.id) sid和uid&#xff0c;也可以写其他的只来替代&#xff1b;而res.info.id是接口的数据可替换成自己的 一次性传的id值刷新页面就没有 永久性传的id 这是Javascript…

Linux——切换CUDA版本

一、查看本地cuda版本 cd /usr/local/ ls当前cuda为软连接&#xff0c;指向指定的cuda版本 stat cuda # 查看当前cuda状态信息二、切换CUDA版本 # 删除原有软连接 sudo rm -rf /usr/local/cuda # 建立需要切换的cuda软连接版本 sudo ln -s /usr/local/cuda-**.* /usr/l…

【GitLab、GitLab Runner、Docker】GitLab CI/CD 应用

安装Gitlab开源版 官方文档-安装Gitlab 使用Docker安装 sudo docker run --detach \--hostname gitlab.example.com \--env GITLAB_OMNIBUS_CONFIG"external_url http://${ip}:9999/; gitlab_rails[gitlab_shell_ssh_port] 8822;" \--publish 443:443 --publish 99…

Circos图绘制

Circos图其实是一个用途非常广泛的图形&#xff0c;可以用于表征基本上任何类型的数据&#xff0c;包括把我们常见的散点图、折线图和柱状图等都可以整合到Circos当中。特别是&#xff0c;Circos尤其适合用来描述生物信息学和基因组学的数据。 1.绘制Circos图 目前绘制Circos图…

单元测试一(理论)-云计算2023.11-云南农业大学

实验《 ECS数据管理实践-备份与恢复》 https://developer.aliyun.com/adc/scenario/7ad13e326c924d07a1ddb4e88cb26ce4 数据盘挂载到 /alidata&#xff0c;alidata改为自己姓名全拼&#xff0c;数据盘上创建文件test.txt&#xff0c;改为test接自己姓名全拼.txt&#xff0c;快…

根据Word模板,使用POI生成文档

突然想起来有个小作业&#xff1a;需要根据提供的Word模板填充数据。这里使用POI写了一个小demo验证下。 测试用模板&#xff1a; 执行结果 1.引入依赖坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId&…

07、如何取出对象数组里的固定 key 值来拼成一个对象(以及对象与数组之间的转化)

1、数据情况&#xff1a; 其一、从后端拿到的数据为&#xff1a; let arr [1, 3, 7, 24] 其二、目标数据为(即&#xff1a;后台需要下发的数据)&#xff1a; {vlan_1: 1, vlan_3: 1, vlan_7: 1, vlan_24: 1} 2、操作过程&#xff1a; 其一、定义一个动态的 key 值来满足…

基于nodejs+vue客户管理管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

JAVA代码审计-cms综合篇

前言 JEECGv3.8。下载地址&#xff1a;GitHub - jeecgboot/jeecg at v3.8 java代码审计第一步&#xff1a;查看web.xml 一个重要的servlet&#xff1a;DispatcherServlet&#xff0c; <servlet><description>spring mvc servlet</description><servle…

MYSQL体系结构总结

&#xff08;笔记整理自b站马士兵教育课程&#xff09; MYSQL总体分为服务层和存储引擎层。 一、服务层 功能&#xff1a; 1、连接&#xff1a;管理连接&#xff0c;权限验证。 2、解析器&#xff1a;词法分析&#xff0c;语法分析。 3、优化器&#xff1a;执行计划生成…

node使用http模块

文章目录 前言一、创建http服务二、设置http的响应报文三、不同请求响应不同数据四、请求响应不同html文件1. 添加www文件夹2. js代码3. 效果 五、get和post请求的区别 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 一、创建http服务 // 1&#xff1a…