C++ STL-Queue容器概念及应用方法详解

2024-09-06 11:52

本文主要是介绍C++ STL-Queue容器概念及应用方法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 再谈队列

队列和栈不同,队列是一种先进先出的数据结构,STL的队列内容极其重要,虽然内容较少但是请务必掌握,STL的队列是快速构建搜索算法以及相关的数论图论的状态存储的基础。

概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。

  • 队列容器允许从一端新增元素,从另一端移除元素。
  • 队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。
  • 队列中进数据称为 — 入队 push
  • 队列中出数据称为 — 出队 pop

2.相关头文件

头文件:#include<queue>

3.初始化

格式为:

**explicit** queue (**const** container_type& ctnr = container_type());

我们以int类型作为参数为例进行创建。

queue<**int**> q;    //创建一个空的没有数据的队列q
queue<**int**> qoo(q);    //创建一个队列其元素为q的全部内容

标准的队列创建方法是直接创建空队列再进行其他的操作,由于队列的特殊性质,拥有其他容器的参数可以这样创建,这种多参数的方式可能有一些复杂,一般也很少这样使用。

vector<**int**> v(3,100);
queue<**int**,vector<**int**> > s(v);  //注意,> >符号之间需要有一个空格隔开

通过标准的方式创建向量数组,然后通过复制构造函数的方式进行创建,其内容就是vector数组的全部内容。

4. 迭代器

栈和队列都属于一种特殊的数据结构,只能通过访问顶层数据并不断剔除数据的方法进行全部访问,因此没有直接的迭代器。

5. 常用接口

我们预先通过queue<int> q创建了一个队列,命名为q,方便举例。

a. 大小size()

返回队列元素的个数

函数原型:size_type size() const;

cout<<q.size()<<endl;   //直接返回队列元素的个数

b. 入队push()

进行入队操作,在队尾处进行插入

函数原型:void push (const value_type& val);

q.push(100);

c. 出队pop()

进行出队操作,在对头出进行弹出

函数原型:void pop();

q.pop();

d. 访问队头元素front()

访问对头元素,可以返回其数值,也可以进行相应的操作,这里更加建议多使用front()访问队头数据,因为我们进行出队操作均是从队头进行出队的。

函数原型:

value_type& front();

const value_type& front() const;

q.front()+=500;     //对队头元素进行修改
cout<<q.front()<<endl;   //直接输出内容
**e. 访问队尾元素back()**

访问队尾元素,较为少用。

函数原型:

value_type& back();

const value_type& back() const;

**while**(q.empty()){

cout<<q.front()<<endl;

q.pop();

}

f. 判空empty()

返回一个bool类型的值,只存在真和假,当队列为空时为真,不为空时为假

函数原型

bool empty() const;

可以利用empty()进行队列的遍历操作,这里建议先使用初始化函数将队列进行复制,否则遍历之后队列就为空了。

6. queue 常用操作

a. 构造函数:

函数原型功能
queue que;queue采用模板类实现,queue对象的默认构造形式。
queue(const queue &que);拷贝构造函数。

b. 赋值操作:

函数原型功能
queue& operator=(const queue &que);重载等号操作符。

c. 数据存取:

函数原型功能
push(elem);往队尾添加元素。
pop();从队头移除第一个元素。
back();返回最后一个元素。
front();返回第一个元素。

d. 大小操作

函数原型功能
empty();判断堆栈是否为空
size();返回栈的大小

e.代码示例

#include <queue>
#include <string>
#include <iostream>
using namespace std;
class Person
{
public:Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};void test01() {//创建队列queue<Person> q;//准备数据Person p1("唐僧", 30);Person p2("孙悟空", 1000);Person p3("猪八戒", 900);Person p4("沙僧", 800);//向队列中添加元素  入队操作q.push(p1);q.push(p2);q.push(p3);q.push(p4);//队列不提供迭代器,更不支持随机访问while (!q.empty()) {//输出队头元素cout << "队头元素-- 姓名: " << q.front().m_Name<< " 年龄: "<< q.front().m_Age << endl;cout << "队尾元素-- 姓名: " << q.back().m_Name<< " 年龄: " << q.back().m_Age << endl;cout << endl;//弹出队头元素q.pop();}cout << "队列大小为:" << q.size() << endl;
}int main() {test01();system("pause");return 0;
}

这篇关于C++ STL-Queue容器概念及应用方法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141934

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示