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.rhkb.cn/news/92073.html

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

相关文章

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解

包管理工具 nvm npm yarn cnpm npx pnpm npm、cnpm、yarn、pnpm、npx、nvm的区别&#xff1a;https://blog.csdn.net/weixin_53791978/article/details/122533843 npm、cnpm、yarn、pnpm、npx、nvm的区别&#xff1a;https://blog.csdn.net/weixin_53791978/article/details/1…

前后端分离------后端创建笔记(10)用户修改

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

Failed to resolve component: v-data-table“. vue3 + vuefity 使用 v-data-table 报错解决

在使用 vue3 vuetify 开发项目的过程中用到了 v-data-table 组件&#xff0c;结果在使用的过程中发现加载失败控制台报错。 [Vue warn]: Failed to resolve component: VDataTable解决方案&#xff1a; import { VDataTable } from vuetify/labs/VDataTable参考文档: https:…

WebStorm修改默认打开的浏览器

有两种方式第一种修改系统默认浏览器 我采用的是下面这种&#xff0c;在webstorm中修改 将浏览器设置为默认的浏览器即可

linux cp -rpf指令

cp -rpf #强行递归复制/etc目录到/mist目录中&#xff0c;并保持源目录的权限等信息不变。 有点类似于打patch&#xff0c;不会改变已有的内容。

无涯教程-Perl - select函数

描述 此函数将输出的默认文件句柄设置为FILEHANDLE,如果未指定文件句柄,则设置由print和write等功能使用的文件句柄。如果未指定FILEHANDLE,则它将返回当前默认文件句柄的名称。 select(RBITS,WBITS,EBITS,TIMEOUT)使用指定的位调用系统功能select()。 select函数设置用于处理…

元宇宙赛道加速破圈 和数软件抓住“元宇宙游戏”发展新风口

当下海外游戏市场仍然具备较大的增长空间。据机构预测&#xff0c;至2025年全球移动游戏市场规模将达1606亿美元&#xff0c;对应2020-2025年复合增长率11&#xff05;。与此同时&#xff0c;随着元宇宙概念持续升温&#xff0c;国内外多家互联网巨头纷纷入场。行业分析平台New…

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 &#x1f4dd; 个人主页 &#xff1a;超人不会飞)&#x1f4d1; 本文收录专栏&#xff1a;《Linux》&#x1f4ad; 如果本文对您有帮助&…

Python中使用隧道爬虫ip提升数据爬取效率

作为专业爬虫程序员&#xff0c;我们经常面临需要爬取大量数据的任务。然而&#xff0c;有些网站可能会对频繁的请求进行限制&#xff0c;这就需要我们使用隧道爬虫ip来绕过这些限制&#xff0c;提高数据爬取效率。本文将分享如何在Python中使用隧道爬虫ip实现API请求与响应的技…

Netty宝典

文章目录 一.NIO1.简介2.缓冲区(Buffer)3.通道(Channel)4.选择器(Selector)5.原理6.SelectionKey7.ServerSocketChannel 和 SocketChannel8.Socket 二.线程模型1.传统阻塞 I/O 服务模型2.Reactor 模式3.单 Reactor 单线程4.单Reactor多线程5.主从 Reactor 多线程6.为什么用Nett…

Unity ARFoundation 配置工程 (Android)

注意&#xff1a; 1、AR Core是Google的产品&#xff0c;因为谷歌制裁华为&#xff0c;所以 有些 华为机可能不支持AR Core的软件&#xff1b; 2、手机在设置里搜索Google Play&#xff0c;看看是否已经安装上了&#xff0c;如果没有装此服务&#xff0c;去商城里搜索Google Pl…

报错解决:matlab机器人工具箱不支持将脚本 DHFactor 作为函数执行

matlab使用机器人工具箱出现报错&#xff1a; 不支持将脚本 DHFactor 作为函数执行: D:\MATLAB\install\toolbox\rvctools\robot\DHFactor.m 解决办法&#xff1a;重新到上图的rvctool重重新安装一下工具箱就好了。 到目录"$机器人工具箱路径$\rvctools" 在matlab命…

如何卖 Click to WhatsApp 广告最有效

2022年&#xff0c;大多数直接面向消费者的品牌都面临相同挑战—— Facebook 和 Instagram 的广告成本大幅增加。Business Insider 报导指出&#xff0c;2021年 Facebook 广告每次点击的平均成本&#xff08;average cost per click&#xff09;达到0.974美元&#xff0c;按年升…

LangChain手记 Question Answer 问答系统

整理并翻译自DeepLearning.AILangChain的官方课程&#xff1a;Question Answer&#xff08;源代码可见&#xff09; 本节介绍使用LangChian构建文档上的问答系统&#xff0c;可以实现给定一个PDF文档&#xff0c;询问关于文档上出现过的某个信息点&#xff0c;LLM可以给出关于该…

直线导轨在视觉检测设备中的应用

随着科技的不断发展&#xff0c;视觉检测设备已经逐渐代替了传统的人工品检&#xff0c;成为了工业生产中的一部分&#xff0c;在五金配件、塑胶件、橡胶件、电子配件等检测工业零部件表面外观缺陷尺寸方面应用&#xff0c;视觉检测设备具有优势。 直线导轨作为视觉检测设备中重…

任我行CRM系统存在 SQL注入漏洞[2023-HW]

任我行CRM系统存在 SQL注入漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC又是一通哈拉少 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及…

macOS CLion 使用 bits/stdc++.h

macOS 下 CLion 使用 bits/stdc.h 头文件 terminal运行 brew install gccCLion里配置 -D CMAKE_CXX_COMPILER/usr/local/bin/g-11

2022年3月全国计算机等级考试真题(二级C语言)

2022年3月全国计算机等级考试真题&#xff08;二级C语言&#xff09; 第1题 下列有关栈论述正确的是&#xff08; &#xff09; A. 栈顶元素最先能被删除 B. 栈顶元素最后才被删除 C. 栈底元素永远不能被删除 D. 以上三种说法都不对 正确答案&#xff1a;A 得 0 / 1 分 第2题…

OpenCV图像处理——轮廓检测

目录 图像的轮廓查找轮廓绘制轮廓 轮廓的特征轮廓面积轮廓周长轮廓近似凸包边界矩形最小外接圆椭圆拟合直线拟合 图像的矩特征矩的概念图像中的矩特征 图像的轮廓 查找轮廓 binary,contours,hierarchycv.findContours(img,mode,method)绘制轮廓 cv.drawContours(img,coutours…

Netty:ByteBuf的资源释放方法

说明 io.netty.buffer.ByteBuf实现了io.netty.util.ReferenceCounted接口&#xff0c;需要显式释放。当ByteBuf被实例化后&#xff0c;它的引用计数是1。 调用ByteBuf对象的release方法释放&#xff1a; ByteBuf的release()方法使引用计数减少1。只有当执行以后引用计数减少…