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

C++基础:模拟实现queue和stack。底层:适配器

引言

模拟实现queue和stack,理解适配器,实现起来非常简单。

一、适配器 

        适配器是一种能让原本不兼容的接口协同工作的设计模式或者组件。它的主要作用是对一个类的接口进行转换,使其符合另一个类的期望接口,进而实现适配和复用。(看下面代码来理解)

可以理解为是一个更高层次的封装。(解耦性更高)

比如:stack可以封装list来实现,queue也可以封装一个list来实现,但是list对内存的空间利用率不高。用vector封装实现的话,头插和头删的效率很低。

所以底层实现了一个双端队列deque用来解决上面的问题。

deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端 进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与 list比较,空间利用率比较高。

deque的底层这里就不多描述了。

二、模拟实现queue

queue是先进后出的数据结构,即只能在尾部插入,头部删除。

#include <deque>namespace stl
{template<class T, class Container = deque<T>> //用deque做适配器class queue{public:void push(const T& x) //尾插{_con.push_back(x);}void pop() //头删{_con.pop_front();}size_t size() const  //元素个数{return _con.size();}bool empty() const  //判空{return _con.empty();}const T& front() const //返回队头{return _con.front();}T& front() //返回队头{return _con.front();}const T& back() const  //返回队尾{return _con.back();}T& back()  //返回队尾{return _con.back();}private:Container _con; //适配器适配数据结构};
}

三、模拟实现stack

stack是先进先出的数据结构。

#pragma once
#include <deque>
using namespace std;namespace stl
{template<class T, class Container = deque<T>>class stack{public:void push(const T& x) //入栈{_con.push_back(x);}void pop()  //出栈{_con.pop_back();}void size() const  //元素个数{return _con.size();}bool empty() const  //判空{return _con.empty();}const T& top() const  //返回栈顶{return _con.back();}T& top() //返回栈顶{return _con.back();}private:Container _con;};
}

http://www.xdnf.cn/news/16602.html

相关文章:

  • 解决mac下git pull、push需要输入密码
  • MySQL(配置)——MariaDB使用
  • 探索 Vim:Linux 下的高效文本编辑利器
  • SBB指令的“生活小剧场“
  • Linux 系统启动与 GRUB2 核心操作指南
  • Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】
  • 作物生长模型Oryza V3实战17:土壤数据集
  • 【RH134 问答题】第 9 章 访问网络附加存储
  • 2025年Solar应急响应公益月赛-7月笔记ing
  • 正运动控制器Zbasic回零详细教程(不带Z信号)
  • 【Linux知识】Linux Shell 脚本中的 `set -ex` 命令深度解析
  • SQL排查、分析海量数据以及锁机制
  • Fast Video generation with sliding tile attention
  • 2-verilog-基础语法
  • flask使用celery通过数据库定时
  • 【Linux我做主】探秘进程状态
  • Java中的有界队列和无界队列详解
  • CMake 目标文件后缀
  • react 项目怎么打断点
  • 大规模矩阵构建与高级算法应用
  • 【Linux篇】补充:消息队列和systemV信号量
  • 为什么分类任务偏爱交叉熵?MSE 为何折戟?
  • 【C++】判断语句
  • 网络数据传输与NAT技术的工作原理
  • 智能体安全与可信AI:防护机制与伦理考量
  • 代码随想录Day32:动态规划(斐波那契数、爬楼梯、使用最小花费爬楼梯)
  • 代码随想录算法训练营第三十三天
  • 力扣 之 最小覆盖子串(变长滑动窗口,越短越好)
  • 历史版本的vscode下载地址
  • 数据处理工具是做什么的?常见数据处理方法介绍