当前位置: 首页 > news >正文

c++ 容器适配器

Container

//创建一个命名空间,避免和库里的冲突
namespace chen
{//写一个模版template<class T, class Container = deque<T>>//开始写我们的类class stack{public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}const T& top(){_con.back();	}bool empty(){return _com.empty();}size_t size(){return _con.size();}private:Container _con;};}

上面代码就是一个容器适配器,这上面的代码可以被认为是一个容器适配器,因为它采用了一个已有的容器(通过模板参数 Container)来实现栈的功能。容器适配器是一种在标准容器之上提供额外接口或修改现有接口的抽象层。

让我们看看为什么这个类可以被看作是一个容器适配器:

  1. 使用模板参数 Container:通过使用模板参数 Container,这个栈类允许用户选择不同的容器类型来存储数据。用户可以传入任何符合栈要求的容器,例如 std::vectorstd::deque、或者其他符合要求的容器类型。

  2. 封装容器操作:该栈类封装了底层容器的操作,如 push_backpop_backback 等,通过公共接口提供对这些操作的访问。这使得用户可以使用栈的接口而不必直接与底层容器进行交互。

  3. 提供栈的特定接口:栈有其自己的特定接口,如 pushpoptopemptysize。这些接口反映了栈的行为,而底层容器的细节被封装在栈类内部。

因此,尽管 stack 类使用了一个已有的容器,但它提供了栈的抽象接口,允许用户通过栈的方式使用底层容器。这种通过封装和提供特定接口的方式,使得栈类成为容器适配器。

deque

deque(双端队列)是C++标准库中的一种容器,它是一种双向开口的连续线性空间,可以在头部和尾部进行快速的插入和删除操作。deque是"double-ended queue"的缩写,它允许在队列的两端执行高效的操作。

以下是deque的一些特点和解释:

  1. 双向开口:deque允许在头部和尾部进行元素的插入和删除操作,而且这些操作都是高效的,不会像vector那样需要移动大量元素。

  2. 连续线性空间:deque内部通常由多个连续的缓冲区组成,这些缓冲区会动态分配和管理,以保持高效的操作。这种设计使得deque可以在内部分段存储数据,而不需要像vector那样连续存储。

  3. 随机访问:deque支持随机访问,就像数组一样,可以通过索引来访问元素,而且访问操作的时间复杂度是常数时间。

  4. 动态增长:deque可以动态增长,当需要存储更多元素时,会自动分配新的缓冲区,并将元素复制到新的缓冲区中。

  5. 插入和删除效率高:由于deque的双向开口特性,插入和删除元素的效率非常高,不仅仅限于队列的末尾,还可以在队列的前端进行操作。

总之,deque是一种非常灵活和高效的数据结构,适用于需要频繁在队列两端进行操作的情况。它是STL(标准模板库)中的一个重要组件,可以用来解决各种问题,包括队列、栈、双端队列等。
deque(双端队列)不仅可以对队头和队尾的元素进行操作,还可以对队列中间的元素进行操作。这是deque与其他容器(如vector)的主要不同之处。

deque支持以下操作:

  1. 头部插入和删除:你可以在deque的头部插入元素,也可以从头部删除元素,这些操作是高效的。

  2. 尾部插入和删除:类似地,你可以在deque的尾部插入元素,也可以从尾部删除元素,这也是高效的。

  3. 中间插入和删除:deque允许在队列中间插入元素或删除元素,虽然这些操作相对于头部和尾部的操作来说稍微复杂一些,但依然是高效的。你可以使用迭代器来访问和操作deque中的任何元素。

这种双向开口的特性使deque非常灵活,可以用于各种场景,不仅仅局限于队列的两端操作。deque在需要随机访问、插入和删除操作的情况下非常有用,因为它可以在常数时间内执行这些操作,而不需要移动大量元素。这使得deque成为STL中一个重要的容器类型。

但是 deque

只是会的多,你可以理解为:会的比vector list 多,但不精通

template< class T, class Container = deque<T> >
这是C++中的模板类定义,具体解释如下:

template< class T, class Container = std::deque<T> >
  1. template<...>: 这是模板的声明,表明接下来定义的是一个模板类或模板函数。

  2. class T: 这里定义了一个模板参数 T,表示该模板类将接受一个类型参数。T 是用户在使用该模板类时需要提供的类型。

  3. class Container = std::deque<T>: 这是另一个模板参数 Container,它有一个默认值为 std::deque<T>。这意味着用户可以选择在使用该模板类时提供自定义的容器类型,如果未提供,则默认使用 std::deque<T> 作为容器类型。

    • std::deque<T> 是 C++ 标准库中的双端队列容器,它允许在两端高效地进行元素的插入和删除操作。

所以,这个模板类 stack 接受两个模板参数:

  • T:表示栈中存储的元素类型。
  • Container:表示存储元素的容器类型,默认为 std::deque<T>

这种设计使得用户可以根据需要选择不同的元素类型和容器类型来实例化这个栈类。例如,可以实例化一个存储 int 类型的栈,使用默认的容器类型 std::deque<int>,也可以实例化一个存储 double 类型的栈,使用其他自定义容器类型。

相关文章:

c++ 容器适配器

Container //创建一个命名空间&#xff0c;避免和库里的冲突 namespace chen {//写一个模版template<class T, class Container deque<T>>//开始写我们的类class stack{public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}const …...

正则表达式的应用领域及基本语法解析

目录 一、正则表达式的应用领域 1. 文本搜索和替换 2. 表单验证 3. 数据提取和分析 4. 数据清洗和处理 5. URL路由和路由匹配 二、正则表达式的基本语法 1. 字符匹配 2. 元字符和字符类 3. 量词和边界 4. 分组和捕获 5. 转义字符 三、常见正则表达式示例 1. 邮箱…...

CIP或者EtherNET/IP中的PATH是什么含义?

目录 SegmentPATH举例 最近在学习EtherNET/IP&#xff0c;PATH不太明白&#xff0c;翻了翻规范&#xff0c;在这里记个笔记。下面的叙述可能是中英混合&#xff0c;有一些是规范中的原文我直接搬过来的。我翻译的不准确。 Segment PATH是CIP Segment中的一个分类。要了解PATH…...

使用lombok进行bulider之后调取HashMap的自定义方法进行对象操作报空指针异常(pojo也适用)

概论 这主要的问题就是bulider的特性的问题&#xff0c;就是他只能给你搭建了一个脚手架&#xff0c;里面的东西其实他没动你的&#xff0c;你得自己去给他实体化&#xff0c;如果你使用了类似HashMap等集合的话&#xff0c;你得自己去bulid一个在那个里面作为初始化对象你才可…...

矩阵-day14

...

上古神器:十六位应用程序 Debug 的基本使用

文章目录 参考环境上古神器 DebugBug 与 DebuggingDebugDebug 应用程序淘汰原因使用限制 DOSBox学习 Debug 的必要性DOSBox-X Debug 的基本使用命令 R查看寄存器的状态修改寄存器的内容 命令 D显示内存中的数据指定起始内存空间地址指定内存空间的范围 命令 A使用命令语法错误查…...

[学习笔记]ARXML - Data Format

参考AUTOSAR文档&#xff1a; https://www.autosar.org/fileadmin/standards/R22-11/FO/AUTOSAR_TPS_ARXMLSerializationRules.pdfhttps://www.autosar.org/fileadmin/standards/R22-11/FO/AUTOSAR_TPS_ARXMLSerializationRules.pdf 编码 arxml只允许使用UTF-8编码&#xff…...

Go_原子操作和锁

原子操作和锁 本文先探究并发问题&#xff0c;再探究锁和原子操作解决问题的方式&#xff0c;最后进行对比。 并发问题 首先&#xff0c;我们看一下程序 num该程序表面看上去一步就可以运行完成&#xff0c;但是实际上&#xff0c;在计算机中是分三步运行的&#xff0c;如下…...

初识Java 12-1 流

目录 Java 8对流的支持 流的创建 随机数流 int类型的区间范围 generate() iterate() 流生成器 Arrays 正则表达式 本笔记参考自&#xff1a; 《On Java 中文版》 ||| 流的概念&#xff1a;流是一个与任何特定的存储机制都没有关系的元素序列。 流与对象的成批处理有关…...

【软件工程_UML—StartUML作图工具】startUML怎么画interface接口

StartUML作图工具怎么画interface接口 初试为圆形 &#xff0c;点击该接口在右下角的设置中->Format->Stereotype Display->Label&#xff0c;即可切换到想要的样式 其他方式 在class diagram下&#xff0c;左侧有interface图标&#xff0c;先鼠标左键选择&#xff0…...

单片机之瑞萨RL78定时计数器

单片机之瑞萨RL78定时计数器 使用瑞萨RL78定时计数器的简单例程。这个例程使用定时器0来产生一个以秒为单位的定时器中断&#xff0c;并在中断服务程序中增加一个全局变量以跟踪中断的发生。 首先&#xff0c;我们需要了解RL78的定时器0是一个16位的定时器&#xff0c;它的时钟…...

手机号码格式校验:@Phone(自定义参数校验注解)

需求 新增接口 和 修改接口 中&#xff0c;手机号码的格式校验是普遍需要的。 在每个手机号码字段上添加正则表达式校验注解来实现校验&#xff0c;重复书写&#xff0c;容易出错&#xff1b;在不同的手机号码字段上&#xff0c;可能使用了不同的校验规则&#xff0c;无法有效…...

ORACLE Redo Log Buffer 重做日志缓冲区机制的设计

最近和朋友包括一些国产数据库的研发人员交流&#xff0c;很多程序员认为 Oracle 已经过时&#xff0c;开源数据库或者他们研发的国产数据库才代表数据库发展的未来。甚至在很多交流会议上拿出自家产品的某一个功能点和 Oracle 对比就觉得已经遥遥领先。 实际上数据库系统的发展…...

PWN Test_your_nc Write UP

目录 PWN 00 解题过程 总结归纳 PWN 01 解题过程 总结归纳 PWN 02 解题过程 总结归纳 PWN 03 解题过程 总结归纳 PWN 04 解题过程 总结归纳 CTF PWN 开始&#xff01; 冲就完了 PWN 00 解题过程 ssh远程链连接 ssh ctfshowpwn.challenge.ctf.show -p28151 输…...

Centos7配置firewalld防火墙规则

这里写自定义目录标题 欢迎使用Markdown编辑器一、简单介绍二、特点和功能2.1、区域&#xff08;Zone&#xff09;2.2、运行时和永久配置2.3、服务和端口2.4、动态更新2.5、连接跟踪2.6、D-Bus接口 三、设置规则3.1、启动防火墙服务3.2、新建防火墙规则的服务&#xff0c;添加端…...

【新版】系统架构设计师 - 未来信息综合技术

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 未来信息综合技术考点摘要信息物理系统CPS的体系架构CPS 的技术体系CPS应用场景 人工智能分类关键技术机器学习 机器人发展分类机器人4.0 边缘计算概念与特点边云协同安全应用场景 数字孪生关键技…...

CAD二次开发LineSegment2d

在C#的CAD二次开发中&#xff0c;LineSegment2d 是AutoCAD的.NET API中的一个类&#xff0c;用于表示二维空间中的线段。它包含了起点和终点的坐标信息&#xff0c;并提供了一些方法用于进行线段之间的计算和判断。 LineSegment2d 类具有以下常用属性和方法&#xff1a; Star…...

Linux shell编程学习笔记5:变量命名规则、变量类型、使用变量时要注意的事项

跟其他的高级开发语言一样&#xff0c;Linux Shell编程中使用的数据也需要保存在变量中。 Shell使用变量来控制其行为&#xff0c;并且可以通过更改变量值来更改Shell和其他程序的行为。 我们先来了解一下变量命令的规则、变量类型和使用变量时要注意的事项。 一、变量命名规…...

如何把word的页眉页脚改为图片

前言 亲戚A&#xff1a; 听说你是计算机专业&#xff1f; 沐风晓月&#xff1a; 是啊 亲戚A&#xff1a; 那正好&#xff0c;来看看我这个页眉怎么改成图片 沐风晓月&#xff1a; 一万匹马奔腾而过 亲戚B&#xff1a; 听说你是英语专业&#xff1f; 沐风晓月&#xff1a; 是啊…...

spring6-实现简易版IOC容器

手写简易版IOC容器 1、回顾Java反射2、实现Spring的IoC 我们都知道&#xff0c;Spring框架的IOC是基于Java反射机制实现的&#xff0c;下面我们先回顾一下java反射。 1、回顾Java反射 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所…...

Feign接口调用GET请求@RequestParam传参丢失

文章目录 问题现象排查解决GET加注解解决使用POST方式解决 时间戳传参失败 问题现象 项目使用的是Spring Cloud微服务&#xff0c;服务间调用使用的是Feign在一次服务调用时&#xff0c;发现GET传参丢失&#xff0c;没有传递过去任何参数加了RequestParam注解&#xff0c;发现…...

LeetCode每日一题 | 309.买卖股票的最佳时机含冷冻期

题目链接&#xff1a; 309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 算法图解&#xff1a; 解题代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();vector&…...

HTML的学习 Day02(列表、表格、表单)

文章目录 一、列表列表主要分为以下三种类型&#xff1a;1. 无序列表&#xff08;Unordered List&#xff09;&#xff1a;2. 有序列表&#xff08;Ordered List&#xff09;&#xff1a;将有序列表的数字改为字母或自定义内容li.../li 列表项标签中value属性&#xff0c;制定列…...

Android shape记录

之前一直觉得dataPath很好用&#xff0c;可以画各种矢量图。今天发现用shape画图也不错&#xff0c;记录一下自己用shape画的图。 一般使用shape就是定义形状、stroke边、solid内部、corners圆角等&#xff0c;代码 <?xml version "1.0" encoding "utf-8&q…...

WSL2和ubuntu的安装过程

目录 1.WSL2的安装 2.Ubuntu的安装 3.安装完成后的打开方式 1.WSL2的安装 按下WINX键&#xff0c;选择Windows PowerShell (管理员) 1.1执行以下命令&#xff0c;该命令的作用是&#xff1a;启用适用于 Linux 的 Windows 子系统 dism.exe /online /enable-feature /featur…...

力扣第150题 逆波兰表达式求值 stack c++

题目 150. 逆波兰表达式求值 中等 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算对象&#xff09;都…...

三、飞行和射击

目录 1.飞行的实现 2.限制玩家视角 3.射击的实现 4.附录 1.飞行的实现 &#xff08;1&#xff09;在Player预制体上挂载Configuration Joint组件&#xff0c;并修改其Y Drive属性 &#xff08;2&#xff09; 修改PlayerInput.cs和PlayerController.cs以实现飞行 PlayerIn…...

GitHub与GitHubDesktop的使用

1、介绍 见天来学习使用GitHub与GitHubDesktop。 学习前先来介绍一下什么是GitHub。 GitHub是一个基于Git的代码托管平台和开发者社区。它提供了一个Web界面&#xff0c;让开发者能够轻松地托管、共享和管理他们的软件项目。 在GitHub上&#xff0c;开发者可以创建自己的代…...

AIGC 微调的方法

AIGC 的微调方法可以分为以下步骤&#xff1a; 数据准备&#xff1a;收集尽可能多的数据&#xff0c;包括输入和输出数据&#xff0c;并将其划分为训练集、验证集和测试集。 模型选择&#xff1a;选择合适的模型结构&#xff0c;例如多层感知器&#xff08;MLP&#xff09;、卷…...

gcc编译webrtc x64

gcc使用Ubuntu系统已经有的gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 1、下载离线版webrtc&#xff08;也可以翻墙下载webrtc&#xff09; 百度云链接: 链接: https://pan.baidu.com/s/1oHVz9bxXlW3Q6uO996c5XA 提取码: ojbs 2、下载gn https://github.com/timnieder…...

自己注册个公司做网站怎么样/阿里巴巴指数查询

简介 django为用户实现防止跨站请求伪造的功能&#xff0c;通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。 全局&#xff1a; 中间件 django.middleware.csrf.CsrfViewMiddleware 局部&#xff1a; cs…...

山西品牌网站建设/在百度上打广告找谁

HMM(隐马尔科夫模型)是自然语言处理中的一个基本模型&#xff0c;用途比较广泛&#xff0c;如汉语分词、词性标注及语音识别等&#xff0c;在NLP中占有很重要的地位。网上关于HMM的介绍讲解文档很多&#xff0c;我自己当时开始看的时候也有点稀里糊涂。后来看到wiki上举得一个关…...

女主网站和男主做/销售策略和营销策略

2014年已尘埃落定&#xff0c;720万大学毕业生身在何处&#xff0c;其中100万计算机相关专业毕业生就业情况又如何&#xff1f;小编由于自身的职业特殊性&#xff0c;有机会接触大量高校毕业生&#xff0c;通过对这些高校毕业生的走访与调查&#xff0c;随机抽样了1000份继续选…...

做企业官网教程/seo技巧是什么意思

主要是dfs,只要dfs这一步想到&#xff0c;也就是怎样把问题转化为区间求和&#xff0c;就很容易用树状数组来求解 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn 100000; int head[maxn10],e[maxn10],num[…...

环球国际网站建设/网站信息

测试用例可以用来衡量一个项目测试质量&#xff0c;因此在平时的测试流程中&#xff0c;编写测试用例就是测试过程中很重要的一步&#xff0c;每一个测试工程师都需要并且非常熟练的编写测试用例&#xff0c;能在编写测试用例中尽可能的覆盖任何异常的测试点&#xff1b;如何能…...

腾云网站建设怎么样/项目平台

1、启动Redis&#xff1a;进入到Redis的安装目录&#xff0c;cmd→cd H:\\redis开启服务&#xff1a;redis-server --service-start停止服务&#xff1a;redis-server --service-stop卸载服务&#xff1a;redis-server --service-uninstall 2、连接Redis①、本地&#xff1a;re…...