【C++】---STL容器适配器之queue

【C++】---STL容器适配器之queue

  • 一、队列
    • 1、队列的性质
  • 二、队列类
    • 1、队列的构造
    • 2、empty()
    • 3、push()
    • 4、pop()
    • 5、size()
    • 6、front()
    • 7、back()
  • 三、队列的模拟实现
    • 1、头文件(底层:deque)
    • 2、测试文件
    • 3、底层:list

一、队列

1、队列的性质

(1)队列是一种容器适配器,容器适配器说白了,它的底层就是用一个标准的容器来封装实现的。专门用于在FIFO:先进先出,从容器的一端插入,一端删除。
在这里插入图片描述

(2)队列作为容器适配器实现,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

(3)底层容器可以是标准容器类模板之一,如可用vector、list可以作为底层容器类,也可以是其他专门设计的容器类,。该底层容器应至少支持以下操作:

    empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用push_back:在队列尾部入队列pop_front:在队列头部出队列

(4)标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。

二、队列类

1、队列的构造

在这里插入图片描述


#include<queue>
int main()
{queue<int> q1;return 0;
}

2、empty()

int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.empty() << endl;return 0;
}

在这里插入图片描述

3、push()

int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.empty() << endl;return 0;
}

4、pop()


int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);while (!q1.empty()){cout << q1.front() << " ";q1.pop();}cout << endl;return 0;
}

在这里插入图片描述

5、size()


int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.size() << endl;return 0;
}

在这里插入图片描述

6、front()


int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);while (!q1.empty()){cout << q1.front() << " ";q1.pop();}cout << endl;return 0;
}

7、back()

返回队列的尾部元素:


int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.back() << " ";cout << endl;return 0;
}

在这里插入图片描述

三、队列的模拟实现

1、头文件(底层:deque)

#pragma once#include<iostream>
#include<vector>
#include<list>
#include<deque>using namespace std;namespace yjl
{template<class T ,class Container = deque<T>>class queue{private:Container _con;public:bool empty(){return _con.empty();}void push(const T& val){_con.push_back(val);}void pop(){_con.pop_front();}size_t size(){return _con.size();}T front(){return _con.front();}T back(){return _con.back();}};
}

2、测试文件


#include"queue.h"void test_queue()
{yjl::queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.size() << endl;cout << q1.front() << endl;cout << q1.back() << endl;while (!q1.empty()){cout << q1.front() << " ";q1.pop();}cout << endl;
}int main()
{test_queue();return 0;
}

在这里插入图片描述
queue的底层最好不要用:vector!
因为vector没有关于头部的插入和删除,这样效率比较低,所以queue的底层最好用deque或者list。

3、底层:list

在这里插入图片描述


好了,今天的分享就到这里了
如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!
在这里插入图片描述

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

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

相关文章

VulnHub靶机 DC-系列合计 通关攻略手册

VulnHub靶机 DC靶机系列 通关手册 DC-1&#xff1a;Vulnhub靶机 DC-1 渗透详细过程 DC-2&#xff1a;Vulnhub靶机 DC-2 渗透详细过程 DC-3&#xff1a;Vulnhub 靶机 DC-3 实战系列 渗透详细过程 DC-4&#xff1a;VulnHub系列 DC-4靶机 渗透详细过程 DC-5&#xff1a;VulnH…

Java基础_集合类_List

List Collection、List接口1、继承结构2、方法 Collection实现类1、继承结构2、相关类&#xff08;1&#xff09;AbstractCollection&#xff08;2&#xff09;AbstractListAbstractSequentialList&#xff08;子类&#xff09; 其它接口RandomAccess【java.util】Cloneable【j…

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址&#xff1a;Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本&#xff0c;作为经典分布式订阅、发布的消息传输中间件&#xff0c;kafka在实时数据处理、消息队列、流处理等领域具有广泛…

【NTN 卫星通信】NTN应该使用FDD还是TDD双工模式

1 概述 现在主流的商用地面通信系统一般都支持FDD和TDD两种模式&#xff0c;实用于不同的频段。那么卫星通信也需要有这两种模式吗&#xff1f; 2 NTN 双工模式分析 在考虑TDD模式时&#xff0c;需要设置保护时间&#xff0c;以防止终端同时发射和接收。该保护时间直接取决于终…

容器安全-镜像扫描

前言 容器镜像安全是云原生应用交付安全的重要一环&#xff0c;对上传的容器镜像进行及时安全扫描&#xff0c;并基于扫描结果选择阻断应用部署&#xff0c;可有效降低生产环境漏洞风险。容器安全面临的风险有&#xff1a;镜像风险、镜像仓库风险、编排工具风险&#xff0c;小…

【ZZULIOJ】1085: 求奇数的乘积(多实例测试)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 给你n个整数&#xff0c;求他们中所有奇数的乘积 输入 输入数据包含多个测试实例&#xff0c;每个测试实例占一行&#xff0c;每行的第一个数为n&#xff0c;表示本组数据一共有n个&#xff0c;接…

计算机网络第十七天(第一天的答案)

网络互连复习笔记 1、ospf三张表&#xff1a;路由表、邻居表、链路状态数据库 2、组播地址的含义&#xff1a; 224.0.0.5所有的ospf路由器 224.0.0.6所有的ospfDR路由器 3、ospf报文类型&#xff1a; Hello(组播) 用于发现直连链路上的ospf邻居和维护ospf邻居…

Python_AI库 Matplotlib的应用简例:绘制与保存折线图

本文默认读者已具备以下技能&#xff1a; 熟悉Python基础语法&#xff0c;以自行阅读python代码块熟悉Vscode或其它编辑工具的应用 在数据可视化领域&#xff0c;Matplotlib无疑是一个强大的工具。它允许我们创建各种静态、动态、交互式的可视化图形&#xff0c;帮助我们更好…

python中如何用matplotlib写雷达图

#代码 import numpy as np # import matplotlib as plt # from matplotlib import pyplot as plt import matplotlib.pyplot as pltplt.rcParams[font.sans-serif].insert(0, SimHei) plt.rcParams[axes.unicode_minus] Falselabels np.array([速度, 力量, 经验, 防守, 发球…

JET毛选学习笔记:如何利用《矛盾论》从做实验到做科研vol. 1

一、前情回顾 上一轮讲了基于《实践论》的方法论学习一门实验&#xff0c;从获取间接经验到实践&#xff0c;总结&#xff0c;再实践&#xff0c;再总结&#xff0c;反反复复无穷尽也&#xff0c;不知道大家悟出了多少呢&#xff1f;其实&#xff0c;有一个概念我刻意避开了没…

新科技辅助器具赋能视障生活:让盲人出行融入日常

随着科技日新月异的发展&#xff0c;一款名为蝙蝠避障专为改善盲人日常生活的盲人日常生活辅助器具应运而生&#xff0c;它通过巧妙整合实时避障与拍照识别功能&#xff0c;成功改变了盲人朋友们的生活格局&#xff0c;为他们提供了更为便捷、高效的生活体验。 这款非同…

注意力机制:SENet详解

SENet&#xff08;Squeeze-and-Excitation Networks&#xff09;是2017年提出的一种经典的通道注意力机制&#xff0c;这种注意力可以让网络更加专注于一些重要的featuremap&#xff0c;它通过对特征通道间的相关性进行建模&#xff0c;把重要的特征图进行强化来提升模型的性能…

【Redis 开发】Redisson

Redisson RedissonRedisson分布式锁Redisson可重入锁Redission解决超时释放的问题Redission解决锁的判断一次性问题Redission分布式锁主从一致性问题 Redisson Redisson是一个在Redis的基础上实现的java驻内存数据网格&#xff0c;就是提供了一系列的分布式的java对象 官方地址…

分布式与一致性协议之Paxos算法(二)

Paxos算法 如何达成共识 想象这样一个场景&#xff0c;某地出现突发事件&#xff0c;当地村委会、负责人等在积极研究和搜集解决该事件的解决方案&#xff0c;你也决定参与其中&#xff0c;提交提案&#xff0c;建议一些解决方法。为了和其他村民的提案做区分&#xff0c;你的…

以太网LAN双向透明传输CH9120透传芯片实现以太网转232串口转485转TTL串口

网络串口透传芯片 CH9120 1、概述 CH9120 是一款网络串口透传芯片。CH9120 内部集成 TCP/IP 协议栈&#xff0c;可实现网络数据包和串口数据的双向透明传输&#xff0c;具有 TCP CLIENT、TCP SERVER、UDP CLIENT 、UDP SERVER 4 种工作模式&#xff0c;串口波特率最高可支持到…

BUUCTF-WEB2

[SUCTF 2019]EasySQL1 1.启动靶机 2.寻找注入点和注入方法 随便输入一个字母&#xff0c;没有回显 随便输入一个数字&#xff0c;发现有回显&#xff0c;并且回显结果一样 3.堆叠注入 1; show databases; #查看数据库 1; show tables; #查看数据表 里面有个flag 1;set …

常见SSH功能概述

SSH的基本功能详解 用户身份验证 密码认证 密码身份验证是SSH中最基本的认证形式。在这种方式下&#xff0c;用户输入用户名和密码进行登录。密码在网络中的传输是加密的&#xff0c;保证了认证过程的安全性。尽管如此&#xff0c;基于密码的登录通常易于暴力破解&#xff0…

基于springboot的企业级工位管理系统源码数据库

基于springboot的企业级工位管理系统源码数据库 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业级工位管理系统的开发全过程。通过分析企业级工位管理系统管理的不足&#xff0c;创建了一个计算机管理企业级工…

并发情况下,Elasticsearch 保证读写一致的方法

1&#xff1a; 可以通过版本号使用乐观并发控制&#xff0c;以确保新版本不会被旧版本覆盖&#xff0c;由应用层来处理具体的冲突&#xff1b; 2&#xff1a; 另外对于写操作&#xff0c;一致性级别支持 quorum/one/all&#xff0c;默认为 quorum&#xff0c;即只有当大多数分…

图像处理ASIC设计方法 笔记19 连通域标记ASIC系统设计

目录 核心的模块有:标记ASIC的工作流程如下:该芯片的系统结构具有如下特点:P131 第6章 连通域标记与轮廓跟踪 本章节讲述了多值分割图像连通域标记芯片的系统设计 多值分割图像连通域标记芯片(以下简称"标记芯片",也称"标记 ASIC"),完成图像连通域标…