stack+queue

适配器

介绍

在C++的标准模板库(STL)中,有几种适配器,它们是一些容器或函数对象的包装,提供了不同的接口和功能,用于适应特定的需求

分类 

STL中的适配器可以分为两类:容器适配器和迭代器适配器

容器适配器

容器适配器用来包装不同种类的容器,并提供统一的接口(其实就是将我们常见的容器包装一下,用来实现其他容器的功能)

常见的容器适配器有:

  • stack(栈): 用于实现后进先出(LIFO)的数据结构,基于另一个容器(默认是deque)来实现
  • queue(队列): 用于实现先进先出(FIFO)的数据结构,也是基于另一个容器(默认是deque)来实现
  • priority_queue(优先队列): 用于实现优先级排序的数据结构,基于另一个容器(默认是vector)来实现

迭代器适配器

迭代器适配器是用来调整迭代器的功能,以满足不同的需求

(这个我目前还不清楚,看了下示例代码,感觉好麻烦的样子) 

deque

介绍

双端队列,全称为 "double-ended queue" , 是C++标准库中提供的一种容器,它是一种支持在两端进行高效插入和删除操作的数据结构

特点 

既可以支持像list一样的头插头删尾插尾删,又支持vector的[ ]操作,以及它支持的迭代器是随机迭代器

内部采用分块存储,用一个指针数组指向多个buf

  • 尾插就直接往后填,头插从后往前填
  • 但对于中间位置的数据就很难去处理,因此deque适合需要频繁头插尾插头删尾删的情况
  • 也就是栈/队列,虽然他俩出数据方式不同,但都只会访问头尾位置的数据

介绍

stack(栈): 用于实现后进先出(LIFO)的数据结构,基于另一个容器(默认是deque)来实现

queue(队列): 用于实现先进先出(FIFO)的数据结构,也是基于另一个容器(默认是deque)来实现

模拟实现

注意点

适配器使用的容器的传参(默认deque)

构造/析构函数不需要自己实现,成员是自定义类型,会调用它自己的构造/析构的

代码

stack

#include <iostream>
#include <vector>
#include <list>
#include <deque>
using namespace std;namespace bit
{template <class T, class Con = deque<T>> // con是适配器(也就是容器适配器,其他容器经过包装 -> stack)class mystack{public:mystack() {}void push(const T &x){_c.push_back(x);}void pop(){_c.pop_back();}T &top(){return _c.back();}const T &top() const{return _c.front();}size_t size() const{return _c.size();}bool empty() const{return _c.empty();}private:Con _c;};
};

queue

namespace bit
{template <class T, class Con = deque<T>>class myqueue{public:myqueue() {}void push(const T &x){_c.push_back(x);}void pop(){_c.pop_front();}T &back(){return _c.back();}const T &back() const{return _c.back();}T &front(){return _c.front();}const T &front() const{return _c.front();}size_t size() const{return _c.size();}bool empty() const{return _c.empty();}private:Con _c;};
}

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

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

相关文章

MySql011——检索数据:过滤数据(使用正则表达式)

前提&#xff1a;使用《MySql006——检索数据&#xff1a;基础select语句》中创建的products表 一、正则表达式介绍 关于正则表达式的介绍大家可以看我的这一篇博客《Java038——正则表达式》&#xff0c;这里就不再累赘。 二、使用MySQL正则表达式 2.1、基本字符匹配 检索…

K8S MetalLB LoadBalancer

1. 简介 kubernetes集群没有L4负载均衡&#xff0c;对外暴漏服务时&#xff0c;只能使用nodePort的方式&#xff0c;比较麻烦&#xff0c;必须要记住不同的端口号。 LoadBalancer&#xff1a;使用云提供商的负载均衡器向外部暴露服务&#xff0c;外部负载均衡器可以将流量路由…

记一次触发器拦截更新操作

1、背景 业务上有一张表记录仓库和经纬度的&#xff0c;正常情况不怎么做变更&#xff1b;业务反馈经常出现经纬度被更新的情况&#xff0c;操作人都是接口或者admin&#xff0c;人工运维后又会被接口/admin覆盖更新掉 2、过程 遇到这种情况&#xff0c;我的第一反应是定位代…

docker镜像管理

创建阿里云容器镜像仓库&#xff1a; 访问地址&#xff1a;https://www.aliyun.com/search?sceneall&kACR&#xff0c;点击立即开通 在实例列表选择个人实例&#xff0c;根据提示创建命名空间、镜像仓库名称等。&#xff08;创建时&#xff0c;代码源我选择的是本地&…

C++ 学习系列 二 -- RAII 机制

一 什么是 RAII &#xff1f; RAII &#xff08;Resource Acquisition Is Initialization&#xff09;是由c之父Bjarne Stroustrup提出的&#xff0c;中文翻译为资源获取即初始化&#xff0c; 其含义是&#xff1a;用局部对象来管理资源的技术&#xff0c;这里所说的资源指的是…

创意转写,文字催生:介绍有用的录音实时转写功能

我有一个朋友叫小敏&#xff0c;是一名记者。她在采访工作中常常遇到一个难题&#xff1a;采访过程中非常容易错过重要信息&#xff0c;到底要用哪款手机录音实时转写软件才能解决这个问题&#xff1f;于是有一天&#xff0c;她听说了一款神奇的录音转文字软件&#xff0c;决定…

七、Linux操作系统下,whichfind如何使用?

1、which命令 &#xff08;1&#xff09;语法&#xff1a;which 参数 &#xff08;2&#xff09;参数&#xff1a;要查找的命令 &#xff08;3&#xff09;示例&#xff1a; 2、find命令 &#xff08;1&#xff09;find 起始路径 -name “被查找的文件名” 注意&#xff1…

python进阶做题日记365-1,

第一天&#xff1a; 1&#xff1a;题目名称&#xff1a;代写匿名信时间限制&#xff1a;1000ms内存限制&#xff1a;256M 题目描述小Q想要匿名举报XX领导不务正业&#xff01; 小Q害怕别人认出他的字迹。 他选择从报纸上剪裁下来英文字母组成自己的举报信。 现在小Q找来了报纸…

re学习(32)【绿城杯2021】babyvxworks(浅谈花指令)

链接&#xff1a;https://pan.baidu.com/s/1msA5EY_7hoYGBEema7nWwA 提取码&#xff1a;b9xf wp:首先找不到main函数&#xff0c;然后寻找特殊字符串&#xff0c; 交叉引用 反汇编 主函数在sub_3D9当中&#xff0c;但是IDA分析错了 分析错误后&#xff0c;删除函数 创建函数 操…

面试热题(合并两个有序列表)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 合并链表这类型题也是比较经典的题了&#xff0c;因为链表是由指针相互指向而确定位置&#xff0c;所以我们只需要改变某些节点的指针便可以做到对链表进行排序 今天这个方法…

【动画】p60动画蓝图、播放蒙太奇、打包

p60动画蓝图、播放蒙太奇、打包 p60动画蓝图、播放蒙太奇、打包添加动画动画蓝图使模型使用动画蓝图奔跑跳舞蒙太奇 移动打断蒙太奇打包退出游戏 p60动画蓝图、播放蒙太奇、打包 添加动画 右键内容浏览器-》动画-》混合空间1D-》选择新的角色的骨骼 如下图在资产详情修改参数…

Prometheus的搭建与使用

一、安装Prometheus 官网下载地址&#xff1a;Download | Prometheus 解压&#xff1a;tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名&#xff1a; mv prometheus-2.19.2.linux-amd64 /home/prometheus进入对应目录&#xff1a; cd /home/prometheus查看配置文件&am…