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

国内免费建站平台免费搭建微信网站设计

国内免费建站平台,免费搭建微信网站设计,建设运营网络或提供网络服务,福建省头条新闻stack和queue 1.stackstack的模拟实现 2.queuequeue的模拟实现 3.容器适配器3.1. 什么是容器适配器3.2. STL标准库中stack和queue的底层结构3.3. deque的简单介绍3.3.1. deque原理介绍3.3.2. deque的缺陷3.3.3. 为什么选择deque作为stack和queue的底层默认容器 1.stack stack的…

stack和queue

  • 1.stack
    • stack的模拟实现
  • 2.queue
    • queue的模拟实现
  • 3.容器适配器
    • 3.1. 什么是容器适配器
    • 3.2. STL标准库中stack和queue的底层结构
    • 3.3. deque的简单介绍
      • 3.3.1. deque原理介绍
      • 3.3.2. deque的缺陷
      • 3.3.3. 为什么选择deque作为stack和queue的底层默认容器

1.stack

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

stack的模拟实现

从栈的接口中可以看出,栈实际是一种特殊的vector,因此使用vector完全可以模拟实现stack。

#pragma once
#include<assert.h>namespace zxj
{//template<class T,class Container=vector<T>>//template<class T,class Container=list<T>>template<class T,class Container=deque<T>>class stack{public:void push(T val){_con.push_back(val);}void pop(){_con.pop_back();}T& top(){return _con.back();}const T& top()const{return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;};void TestStack(){stack<int>st;st.push(1);st.push(2);st.push(3);st.push(4);while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;}
}

2.queue

底层容器要满足以下操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

queue的模拟实现

#pragma once
#include<assert.h>namespace zxj
{//template<class T, class Container = list<T>>template<class T, class Container = deque<T>>class queue{public:void push(T val){_con.push_back(val);}void pop(){_con.pop_front();}T& back(){return _con.back();}const T& back()const{return _con.back();}T& front(){return _con.front();}const T& front()const{return _con.front();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;};void TestQueue(){queue<int>st;st.push(1);st.push(2);st.push(3);st.push(4);while (!st.empty()){cout << st.front() << " ";st.pop();}cout << endl;}
}

3.容器适配器

3.1. 什么是容器适配器

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。
在这里插入图片描述

3.2. STL标准库中stack和queue的底层结构

虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque,比如:
在这里插入图片描述
在这里插入图片描述

3.3. deque的简单介绍

3.3.1. deque原理介绍

deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。
在这里插入图片描述
deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组,其底层结构如下图所示:
在这里插入图片描述
双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落在了deque的迭代器身上,因此deque的迭代器设计就比较复杂,如下图所示:
在这里插入图片描述
那deque是如何借助其迭代器维护其假想连续的结构呢?
在这里插入图片描述

3.3.2. deque的缺陷

与vector比较,deque的优势是:头部插入和删除时,不需要搬移元素,效率特别高,而且在扩容时,也不需要搬移大量的元素,因此其效率是必vector高的。
与list比较,其底层是连续空间,空间利用率比较高,不需要存储额外字段。
但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构

3.3.3. 为什么选择deque作为stack和queue的底层默认容器

在这里插入图片描述

http://www.yayakq.cn/news/366319/

相关文章:

  • 网站的设计原则中山网站外包
  • 婚纱网站开发的必要性单位网站建设注意事项
  • 张店好的网站建设的公司外贸建站选择哪个服务器好
  • 建设工程合同管理考试试题及答案淘宝seo推广优化
  • 网站平台做推广方案百度的网站哪来的
  • wordpress网站聊天插件网站建设公司怎么样
  • 东莞市机电工程学校网站建设与管理社保个人网页登录
  • 单页网站怎么制作教程简述seo的优化流程
  • 在微信上做彩票网站app开发方式有哪些
  • 环保主题网站模板网站域名密码
  • 合肥学习做网站网站点赞怎么做
  • 网站解析设置上海网站seo
  • asp 做网站网站常用参数
  • 郑州做的比较好网站公司吗做名片最好的网站
  • 如何加强英文网站建设官网建设公司
  • app官方安装下载兰州网络优化
  • Wordpress网站开发收费宁波方正建设监理网站
  • wordpress模板网站模板虚拟机网站建设与管理
  • 使用html5的网站无锡公司网站建设
  • 苏州专业网站建设设计123上网之家网址
  • 吕邵苍设计公司网站html简单动画代码
  • 设计师招聘网站推荐赣县网站制作
  • 网站建设代理开发科技企业服务彩票网站开发dadi163
  • 正规的营销型网站建设西安专业网站建设服务
  • 设计logo网站免费无水印中国纪检监察报怎么订阅
  • 网站备案法规怎么建设家乡网站
  • 做任务领取礼品的网站杭州有哪些互联网公司
  • 佛山视频网站搭建公司福田瑞沃汽车官网
  • 婚纱网站建设第一模板网站上的模板怎么下载
  • 承德 网站建设深圳谷歌网络推广公司