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

C++----剖析stack、queue

stack与queue与前面学过的容器不同,它是容器适配器,什么意思呢,就是使用之前学过的vector、list来模拟实现stack、queue,接下来来实现一下。

	template<class T, class container = std::deque<T>>class stack{public:void pop(){c.pop_back();}void push(const T& value){c.push_back(value);}const T& top(){return c.back();}size_t size(){return c.size();}bool empty(){return c.empty();}private:container c;};

其中,模板class就是参数,与函数参数十分类似,它不仅可以是数据类型,还可以是逻辑类型,比如后面的容器参数,给了一个默认参数deque。在使用的过程中呢,我们也可以使用vector、list作为底层容器:

void test1()
{w::stack<int,std::vector<int>> s;//w::stack<int, std::list<int>> s;//w::stack<int, std::string> s;s.push(1);s.push(2);s.push(3);s.push(300);std::cout << s.top()<<std::endl;s.pop();std::cout << s.top() << std::endl;;s.pop();std::cout << s.top() << std::endl;;s.pop();std::cout << s.top() << std::endl;;
}

vector以及list都可以打印出正确的数字,但是使用string时,出现了错误,300打印为了44,为什么呢?string是“char的vector”所以可以用来接收数字,但是由于char只有8个字节,所以范围为-128~127,也就是256个数,在接收300时发生截断,得到了44(可以看一下补码,计算可得截断后的数字)。还有一件事,就是在模拟实现stack时,一定要复用可用容器的共有函数。

queue:由于queue需要先进先出,所以肯定会存在头删,那么就不再使用vector作为底层容器,因为vector不提供直接的头删。也不可以使用erase删除头节点!虽然理论上是可行的,大部分容器也都有erase,但是考虑到vector头删效率太低,要挪动大量数据,所以不使用vector作为queue的底层容器!

template<class T, class container = std::deque<T>>//队列不用vectorclass queue{public:void pop(){c.pop_front();}void push(const T& value){c.push_back(value);}const T& back(){return c.back();}const T& front(){return c.front();}size_t size(){return c.size();}bool empty(){return c.empty();}private:container c;};

http://www.lryc.cn/news/571490.html

相关文章:

  • 唯杰地图文档AI搜索-为二次开发者打造的智能开发助手
  • 山东大学 软件项目管理知识点总结
  • ffmpeg python rgba图片合成 4444格式mov视频,保留透明通道
  • crf FFmpeg
  • EMQX简介
  • arcpy数据分析自动化(3)
  • 如何使用postman
  • 答辩讲解387基于Spring Boot的心理健康管理系统
  • Android 开发问题:android.content.res.Resources$NotFoundException: Resource ID
  • 在 Java 中使用 Apache Tika 读取 doc、docx等格式文件内容
  • python web开发-Flask 重定向与URL生成完全指南
  • 课程1-10笔记
  • Vue3+TypeScript中v-bind()的原理与用法
  • JavaEE->多线程1
  • Python词频统计工具全解析
  • 代码随想录打卡第三十天 动态规划
  • CppCon 2016 学习:The Exception Situation
  • 【wsl】docker
  • Python FastAPI详解
  • 在Docker上安装Mongo及Redis-NOSQL数据库
  • JVM(4)——引用类型
  • CubeMax配置串口通讯
  • 微信小程序:将搜索框和表格封装成组件,页面调用组件
  • Kafka 向 TDengine 写入数据
  • 游戏技能编辑器界面优化设计
  • Java + Spring Boot + MyBatis 枚举变量传递给XML映射文件做判断
  • node.js使用websockify代理VNC代理使用NoVNC进行远程桌面实现方案
  • docker问题排查
  • 【Python系列PyCharm实战】ModuleNotFoundError: No module named ‘sklearn’ 系列Bug解决方案大全
  • 使用Kotlin开发后端服务的核心方法