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

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.dtcms.com/a/304811.html

相关文章:

  • openbmc 阈值sensor分析
  • 第二课 P-MOS管应用
  • 洛谷 P11227 [CSP-J 2024] 扑克牌
  • 微算法科技(NASDAQ:MLGO)应用区块链联邦学习(BlockFL)架构,实现数据的安全传输
  • Ika Network 正式发布,让 Sui 智能合约可管理跨链资产
  • 格雷码的应用场景
  • 光环云在2025WAIC联合发布“AI for SME 全球普惠发展倡议”
  • 银行回单识别和发票识别相结合的应用场景及技术方案
  • 20250729-day23
  • 【Mac版】Linux 入门命令行快捷键+联想记忆
  • RDD的checkpoint检查点机制(Checkpoint 与 Persist 的区别)
  • 负载均衡、算法/策略
  • linux实战--日志管理
  • 数字ic后端设计从入门到精通13(含fusion compiler, tcl教学)全定制版图设计
  • 【嵌入式电机控制#17】电流环(四):电流闭环控制
  • 汽车品牌如何用直播“开出去”?从展厅到售后,一站式解决方案
  • 智慧园区系统引领未来:一场科技与生活的完美融合
  • 微信小程序无法构建npm,可能是如下几个原因
  • linux内核报错汇编分析
  • C++学习之继承
  • 【IQA技术专题】纹理相似度图像评价指标DISTS
  • 编写一个markdown文本编辑器工具
  • 7月29号打卡
  • 无需反复登录!当贝AI聚合通义Qwen3-235B等14大模型
  • 大文件的切片上传和断点续传前后端(Vue+node.js)具体实现
  • JetBrains IDE插件开发及发布
  • java导入pdf(携带动态表格,图片,纯java不需要模板)
  • 15K的Go开发岗,坐标北京
  • 第七章 MCP协议
  • Wndows Docker Desktop-Unexpected WSL error错误