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

STL-stack/queue/deque(容器适配器)

 

目录

​编辑

STL-stack

150. 逆波兰表达式求值

stack

queue

std::stack

deque

性能测试

结构


STL-stack

栈的压入、弹出序列_牛客题霸_牛客网输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假。题目来自【牛客题霸】icon-default.png?t=O83Ahttps://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&&tqId=11174&rp=1&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking

bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {// write code herestack<int> st;int pushi=0,popi=0;while(pushi<pushV.size()){st.push(pushV[pushi]);pushi++;while(!st.empty()&&st.top()==popV[popi]){st.pop();popi++;}}return st.empty();}

双层while循环

150. 逆波兰表达式求值

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/evaluate-reverse-polish-notation/description/

 int evalRPN(vector<string>& tokens) {stack<int> st;for(auto str:tokens){if(str=="+"||str=="-"||str=="*"||str=="/"){int right=st.top();st.pop();int left=st.top();st.pop();switch(str[0]){case '+':st.push(left+right);break;case '-':st.push(left-right);break;case '*':st.push(left*right);break;case '/':st.push(left/right);break;}}else{st.push(stoi(str));}}return st.top();}

stack

template<class T,class Container>
class stack
{
public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}T& top(){return _con.back();}
private:Container _con;
};
stack<int, vector<int>> st;
st.push(1);
st.push(2);
st.push(3);
while (!st.empty())
{cout << st.top() << " ";st.pop();
}

queue

template<class T,class Container>
class queue
{
public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_front();}size_t size(){return _con.size();}bool empty(){return _con.empty();}T& front(){return _con.front();}T& back(){return _con.back();}
private:Container _con;
};

不能用vector,vector不支持头删(效率太低)。只能支持list

总结:

stl中的stack和queue是通过容器适配器转换出来的,不是原生实现的->提高代码的复用性。

class template

<stack>

std::stack

template <class T, class Container = deque<T> > class stack;

class Container = deque<T>双端队列。

deque

支持任意位置插入和随机访问。

性能测试

void test_deque()
{deque<int> d;vector<int> v;const int n = 10000;srand(time(0));for (size_t i = 0; i < n; ++i){int x = rand();d.push_back(x);v.push_back(x);}size_t begin1 = clock();sort(d.begin(), d.end());size_t end1 = clock();size_t begin2 = clock();sort(v.begin(), v.end());size_t end2 = clock();cout << end1 - begin1 << endl;cout << end2 - begin2 << endl;
}

结构

deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维 数组,其底层结构如下图所示:

双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落 在了deque的迭代器身上,因此deque的迭代器设计就比较复杂,如下图所示:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 直播相关03-录制麦克风声音, ffmpeg 命名,使用命令行完成录音
  • 收藏:不错的中兴的数据治理的PPT
  • framebuffer在Ubuntu上的操作
  • python字典和列表学习
  • Vim编辑器的使用方法
  • 信刻光盘安全隔离与信息交换系统
  • Lvgl8.3 自定义矩形按键的标签,图标 lv_btnmatrix
  • bpftrace使用
  • git 压栈存储当前分支修改,出栈使用保存
  • at:定时任务,仅执行一次
  • Python 内置的一些数据结构
  • ISAC: Toward Dual-Functional Wireless Networks for 6G and Beyond【论文阅读笔记】
  • 02 Flask-快速上手
  • Docker中的容器内部无法使用vi命令怎么办?
  • 敏捷开发方法例题
  • 2018一半小结一波
  • create-react-app做的留言板
  • EOS是什么
  • MySQL几个简单SQL的优化
  • MySQL数据库运维之数据恢复
  • SpringCloud集成分布式事务LCN (一)
  • Swift 中的尾递归和蹦床
  • 阿里云Kubernetes容器服务上体验Knative
  • 前端_面试
  • 使用 QuickBI 搭建酷炫可视化分析
  • 源码安装memcached和php memcache扩展
  • Java性能优化之JVM GC(垃圾回收机制)
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #### go map 底层结构 ####
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (06)Hive——正则表达式
  • (12)目标检测_SSD基于pytorch搭建代码
  • (21)起落架/可伸缩相机支架
  • (web自动化测试+python)1
  • (备份) esp32 GPIO
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (七)Activiti-modeler中文支持
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一)appium-desktop定位元素原理
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 物件導向與老子思想 (OO)
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net程序帮助文档制作
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • @angular/cli项目构建--http(2)