C++ queue适配器(配接器)

queue

queue是C++STL库中的一个适配器,一般使用deque作为数据存储容器。在数据结构中,它是采用队列的设计思路;在算法领域中,适用于解决宽度优先搜索BFS、图论等问题。下面我们就来认识一下queue适配器。

文章目录

  • queue
    • 1. queue的介绍和使用
      • 1.1 queue的介绍
      • 1.2 queue的使用
        • 1.2.1 queue的构造
        • 1.2.2 成员函数
    • 2. queue底层实现
      • 2.1 容器适配器(配接器)
        • 2.1.1 什么是适配器(配接器)
      • 2.2 模拟实现queue

1. queue的介绍和使用

1.1 queue的介绍

queue的文档介绍

queue就是队列,满足先入先出(FIFO)原则

1.2 queue的使用

下面就介绍几种最为常用的接口使用

1.2.1 queue的构造
构造函数(constructor)接口说明
explicit queue (const container_type& ctnr = container_type());将容器中的值拷贝给queue
1.2.2 成员函数
Member functions接口说明
empty判断queue是否为空,是空返回true,非空返回false
size返回queue中元素的个数
front返回队头元素的引用
back返回队尾元素的引用
push 进行入队(尾插)操作
pop进行出队(头删)操作
swap交换两个queue的内容
#include <iostream>
#include <queue>
using namespace std;
int main()
{queue<int> q;q.push(1);q.push(2);q.push(3);q.push(4);cout << q.size() << endl;cout << q.back() << endl;while (!q.empty()){cout << q.front() << " ";q.pop();}cout << endl;  return 0;
}

2. queue底层实现

2.1 容器适配器(配接器)

在这里插入图片描述

根据文档说明 queue 是一种 container adaptor 即适配器

2.1.1 什么是适配器(配接器)

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另一个接口

C++STL中有三种适配器:

  1. container adapter 两个容器 stack 、queue其实是适配器
  2. iterator adapter
  3. function adapter 改变仿函数的接口者

2.2 模拟实现queue

// queue.h
#pragma once
#include <iostream>
#include <list>
#include <deque>
using namespace std;namespace Alen
{template<class T, class Container = deque<T>>	// 模板指定类型class queue{public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_front();}const T& front() const{return _con.front();}const T& back() const{return _con.back();}size_t size() const{_con.size();}bool empty() const{return _con.empty();}private:Container _con;};
}

这就是利用适配器的思想,调用已有的容器接口来完成客户期望的接口

感谢你的支持,喜欢本文记得点赞收藏噢。

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

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

相关文章

C++ 二叉树进阶:二叉搜索树

目录 二叉搜索树的概念 二叉搜索树的实现 基本结构 插入 1&#xff0c;当树是空树的时候 2&#xff0c;当树不为空的时候 3&#xff0c;纠正后的代码 查找 删除 1&#xff0c;左为空或右为空 2&#xff0c;左右都不为空 3&#xff0c;删除的完整代码&#xff1a; 二…

蛋白质残基的距离计算以及径向基函数变换中的维度变化

1. 计算Ca距离的函数 def _dist(self, X, mask, eps=1E-6):mask_2D = torch.unsqueeze(mask,1) * torch.unsqueeze(mask,2)dX = torch.unsqueeze(X,1) - torch.unsqueeze(X,2)D = mask_2D * torch.sqrt(torch.sum(dX**2, 3) + eps)D_max, _ = torch.max(D, -1, keepdim=True)D…

visual studio设置修改文件字符集方法

该方法来自网文&#xff0c;特此记录备忘。 添加两个组件&#xff0c;分别是Force UTF-8,FileEncoding。 截图如下&#xff1a; 方法如下&#xff1a;vs中点击“扩展”->“管理扩展”&#xff0c;输入utf搜索&#xff0c;安装如下两个插件&#xff0c;然后重启vs&#xf…

MongoDB 安装教程(MAC版本)

1.官网地址 https://www.mongodb.com/ 下载社区版&#xff0c;并且解压即可 2.安装位置 没有固定位置&#xff0c;将解压后的文件拷贝到任意位置&#xff0c;这里将以 /usr/locall为例。 3.配置环境变量 ## 1.打开环境配置文件 open .bash_profile ## 2.添加环境配置&#…

input子系统的框架和重要数据结构详解

#1024程序员节 | 征文# 往期内容 I2C子系统专栏&#xff1a; 专栏地址&#xff1a;IIC子系统_憧憬一下的博客-CSDN博客具体芯片的IIC控制器驱动程序分析&#xff1a;i2c-imx.c-CSDN博客 – 末篇&#xff0c;有往期内容观看顺序 总线和设备树专栏&#xff1a; 专栏地址&#…

【人工智能】掌握深度学习中的时间序列预测:深入解析RNN与LSTM的工作原理与应用

深度学习中的循环神经网络&#xff08;RNN&#xff09;和长短时记忆网络&#xff08;LSTM&#xff09;在处理时间序列数据方面具有重要作用。它们能够通过记忆前序信息&#xff0c;捕捉序列数据中的长期依赖性&#xff0c;广泛应用于金融市场预测、自然语言处理、语音识别等领域…

RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器

RSocket vs WebSocket&#xff1a;Spring Boot 3.3 中的两大实时通信利器 随着现代互联网应用的不断发展&#xff0c;实时通信已经成为许多应用程序不可或缺的功能。无论是社交网络、在线游戏还是数据监控系统&#xff0c;实时通信都能提供快速、无缝的信息交换。而实现实时通…

高精度KEITHLEY2636A参数资料吉时利2636B数字源表

Keithley 2636A吉时利2636B数字源表&#xff0c;200V&#xff0c;1fA/1uV&#xff0c;2 通道&#xff0c;10A 脉冲 Keithley 2636A SourceMeter 是 Keithley 最新 IV 源测量仪器的一部分&#xff0c;可用作台式 IV 表征工具或多通道 IV 测试系统的构建块组件。对于台式使用&am…

STM32通信协议-I2C

目录 一&#xff0c;IC2的协议规则 I2C总线是PHILIPS公司开发的两线式串行总线&#xff0c;I2C总线主要解决了单片机一对多通信的问题 两根通信线&#xff1a;SCL,SDA&#xff0c;同步&#xff0c;半双工通信&#xff0c;支持数据应答机制&#xff0c;支持总线挂载多设备。 …

策略模式是一种行为设计模式

策略模式是一种行为设计模式&#xff0c;允许你定义一系列算法、封装每一个算法&#xff0c;并使它们可以相互替换。 策略模式使得算法的变化独立于使用算法的客户端。以下是一个用策略模式实现不同类型促销活动的 Java 示例。 步骤 定义促销策略接口&#xff1a;创建一个接…

Python异常检测- 单类支持向量机(One-Class SVM)

系列文章目录 Python异常检测- Isolation Forest&#xff08;孤立森林&#xff09; python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子&#xff08;LOF&#xff09;算法 Python异常检测- DBSCAN 文章目录 系列文章目录前言一、On…

图像高清化(论文复现)

图像高清化(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 图像高清化(论文复现)概述算法原理核心逻辑效果演示使用方式概述 本文复现论文 “Zero-Shot” Super-Resolution using Deep Internal Learning[1] 提出的图像超分辨率方法。 图像超分辨率是指从低…

如何从模块内部运行 Pytest

在 Python 中&#xff0c;pytest 是一个强大的测试框架&#xff0c;用于编写和运行测试用例。通常我们会在命令行中运行 pytest&#xff0c;但是有时你可能希望从模块或脚本的内部运行 pytest&#xff0c;比如为了自动化测试或集成到某个工作流程中。 1、问题背景 当你从模块…

计算机视觉中的坐标变换

1.概述 高级驾驶辅助系统&#xff08;ADAS&#xff09;领域&#xff0c;存在多种常用的坐标系&#xff1a;LiDAR 坐标系、车辆坐标系、相机坐标系、图像坐标系等。因为和这些坐标系频繁打交道&#xff0c;本文对点的旋转与坐标系旋转等变换给出直观推导与说明。 2.坐标点平移…

Android Audio基础——音频混音结束处理(十一)

上一篇文章主要介绍了混音线程 MixerThread 的创建及混音流程的处理过程,这里我们看一下完成混音后的调用流程。 一、音频处理结束 在音频处理中,结束阶段通常分为两个主要阶段:sleep 和 standby。这两个阶段的目的是为了节省资源和优化性能。 源码位置:/frameworks/av/s…

06 go语言(golang) - 循环语句运算符

循环语句 在Go语言中&#xff0c;for 循环是实现循环的主要方式&#xff0c;它非常灵活且强大。 1. 基本的 for 循环 这种形式类似于 C/C 和 Java 中的 for 循环。它包括三个部分&#xff1a;初始化语句&#xff1b;条件表达式&#xff1b;后续操作&#xff08;通常是递增或…

多租户架构的全景分析(基本概念、实现策略、资源管理和隔离、数据安全与隔离、性能优化、扩展性与升级、案例研究)

文章目录 1. 多租户的基本概念2. 多租户的实现策略2.1 独立数据库模式2.2 共享数据库-独立Schema模式2.3 共享数据库-共享Schema模式 3. 资源管理和隔离4. 数据安全与隔离5. 性能优化6. 扩展性与升级7. 案例研究总结 多租户架构在云计算和SaaS应用中越来越流行&#xff0c;因为…

Netty无锁化设计之对象池实现

池化技术是比较常见的一种技术&#xff0c;在平时我们已经就接触很多了&#xff0c;比如线程池&#xff0c;数据库连接池等等。当我们要使用一个资源的时候从池中去获取&#xff0c;用完就放回池中以便其他线程可以使用&#xff0c;这样的目的就是为了减少资源开销&#xff0c;…

【编程语言】C++ 中 vector 初始化的多种方法详解

在 C 中&#xff0c;vector 是一个非常重要的数据结构&#xff0c;它提供了动态数组的功能&#xff0c;可以在运行时根据需要自动调整大小。vector 的初始化方法有多种&#xff0c;既可以简单地进行初始化&#xff0c;也可以根据特定的需求进行复杂的初始化。在这篇博客中&…

JMeter 动态参数赋值实践

目录 前言 单线程 用户参数 场景说明 实战结果 配置明细 单线程 CSV Data Set Config 场景说明 实践结果 配置明细 多线程循环单次执行 场景说明 实践结果 配置明细 单线程 控制器 用户自定义变量 用户参数 场景说明 实战结果 配置明细 多并发 多接口 …