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

眉山市做网站的公司遵义怎样做网站

眉山市做网站的公司,遵义怎样做网站,专业网站制作公司案例,外包一个企业网站多少钱目录 一、容器适配器 1. 什么是适配器模式 2. stack与queue的底层结构 3. deque的原理与缺陷 3.1 deque的原理 3.2 deque的缺陷 4. 为何选择deque作为默认底层容器 二、stack与queue的模拟实现 1. stack的实现 2. queue的实现 一、容器适配器 1. 什么是适配器模式 适…

目录

一、容器适配器

1. 什么是适配器模式

2. stack与queue的底层结构

3. deque的原理与缺陷

3.1 deque的原理

3.2 deque的缺陷 

4. 为何选择deque作为默认底层容器

二、stack与queue的模拟实现

1. stack的实现

2. queue的实现


一、容器适配器

1. 什么是适配器模式

        适配器模式是一种结构型设计模式,其核心思想是将一个类的接口转换为用户期望的另一个接口。在STL中,容器适配器(如stackqueue)通过封装现有容器(如dequevectorlist),提供符合特定数据结构特性的接口,从而屏蔽底层细节,简化开发。


2. stack与queue的底层结构

尽管stackqueue可以存储元素,但它们并非直接归类为容器,而是容器适配器。这是因为它们基于其他容器进行接口封装,默认情况下使用deque作为底层容器:


3. deque的原理与缺陷

3.1 deque的原理

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

deque并不是真正连续的空间,其内部由多个固定大小的连续内存块(缓冲区) 组成,通过中控器(指针数组)管理这些块,形成一个逻辑上的连续空间。实际deque类似于一个动态的二维数组,其底层结构如下图所示:

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


 

那deque是如何借助迭代器维护其假想连续的结构呢? 

3.2 deque的缺陷 

        与vector比较,deque的优势是:头部插入和删除时,不需要搬移元素,效率特别高,而且在扩容时,也不需要搬移大量的元素,因此其效率是比vector高的。

        与list比较,其底层是连续空间,空间利用率比较高,不需要存储额外字段。

        但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构。


4. 为何选择deque作为默认底层容器

尽管deque有遍历效率低的缺陷,但作为stackqueue的底层容器却十分合适:

  1. 无需遍历stackqueue仅需在固定端操作,规避了deque的遍历缺陷。

  2. 高效扩容:相比vectordeque扩容时无需搬移大量元素。

  3. 内存友好:相比listdeque内存碎片少,空间利用率高。


二、stack与queue的模拟实现

1. stack的实现

  • stack 使用 deque 作为底层容器,默认通过模板参数指定。

  • push pop 操作分别调用底层容器的 push_back pop_back

  • top 方法返回栈顶元素,直接调用底层容器的 back 方法。

  • size empty 方法分别返回底层容器的大小和是否为空。

#include <deque>namespace lv
{template <class T, class Container = std::deque<T>>class stack{public:// 构造函数stack(){}// 向栈顶添加元素void push(const T& x){_container.push_back(x); // 使用底层容器的 push_back}// 从栈顶移除元素void pop(){_container.pop_back(); // 使用底层容器的 pop_back}// 获取栈顶元素T& top(){return _container.back(); // 使用底层容器的 back}// 获取栈顶元素(const版本)const T& top() const{return _container.back();}// 获取栈的大小size_t size() const{return _container.size();}// 判断栈是否为空bool empty() const{return _container.empty();}private:Container _container; // 底层容器,默认使用 deque};
}

2. queue的实现

  • queue 使用 deque 作为底层容器,默认通过模板参数指定。

  • push 方法调用底层容器的 push_back,将元素添加到队尾。

  • pop 方法调用底层容器的 pop_front,从队头移除元素。

  • front back 方法分别返回队头和队尾的元素。

  • sizeempty 方法分别返回底层容器的大小和是否为空。

#include <deque>namespace lv 
{template <class T, class Container = std::deque<T>>class queue {public:// 构造函数queue() {}// 向队尾添加元素void push(const T& x) {_container.push_back(x); // 使用底层容器的 push_back}// 从队头移除元素void pop() {_container.pop_front(); // 使用底层容器的 pop_front}// 获取队头元素T& front() {return _container.front(); // 使用底层容器的 front}// 获取队头元素(const版本)const T& front() const {return _container.front();}// 获取队尾元素T& back() {return _container.back(); // 使用底层容器的 back}// 获取队尾元素(const版本)const T& back() const {return _container.back();}// 获取队列的大小size_t size() const {return _container.size();}// 判断队列是否为空bool empty() const {return _container.empty();}private:Container _container; // 底层容器,默认使用 deque};
}

文章转载自:

http://sPBhXwBN.nfccq.cn
http://CMpZK5QP.nfccq.cn
http://L14G9D6u.nfccq.cn
http://R4D0Pvwx.nfccq.cn
http://zELfvMp8.nfccq.cn
http://SWX22Eca.nfccq.cn
http://ihLvdwWE.nfccq.cn
http://Wdd49h5v.nfccq.cn
http://crlBEnsf.nfccq.cn
http://3Y03qhpB.nfccq.cn
http://df1rAMot.nfccq.cn
http://t7uqmrZ5.nfccq.cn
http://S2U7QUdq.nfccq.cn
http://Iq9Z8TJw.nfccq.cn
http://zoZAwUMZ.nfccq.cn
http://c4fwBtS8.nfccq.cn
http://1Y27iHsx.nfccq.cn
http://nl73ectF.nfccq.cn
http://KNnJyVfU.nfccq.cn
http://UarCG9OY.nfccq.cn
http://yfuJBFlS.nfccq.cn
http://0N3EKsUK.nfccq.cn
http://aqmSobCP.nfccq.cn
http://epQmkObG.nfccq.cn
http://H8Vdo9SY.nfccq.cn
http://AFhDH2IM.nfccq.cn
http://zOWUHvtf.nfccq.cn
http://snwgCfkO.nfccq.cn
http://A85hegZO.nfccq.cn
http://LwWncHOT.nfccq.cn
http://www.dtcms.com/wzjs/638272.html

相关文章:

  • xwiki做的网站佛山新网站建设如何
  • 用ps做企业网站分辨率是多少钱攻城霸业手游下载
  • 制作竞拍网站h5响应式网站建设方案怎么写
  • 中国网站设计师公司建网站的详细步骤
  • 实用写作网站青岛网站设计哪家好
  • 成都网站建设成功案例单招网泉州seo优化排名公司
  • 小白建站企业信用信息公示系统山西
  • 如何做网站分析好的做问卷调查的网站
  • 建设运营平台网站的方法wordpress小鹅通
  • 沧州网站建设培训学校快递公司网站怎么做
  • 创意网站制作网站建设开
  • 洮南网站建设随申办app下载
  • 南昌网站建设培训学校移动端网站建设的软件有哪些
  • 手机网站制作app建设网站的公司有哪些
  • 兰州网站建设价格嘉兴互联网公司
  • 企业网站pc优化百度广告投放平台
  • 高中作文网站怎么做别人可以上的网站
  • 做pc网站如何实时预览浙江品牌网站设计专家
  • 广州新建站什么网站可以快速做3d效果图
  • 西部数码 空间做2个网站芜湖的网站建设
  • 做红k线网站wordpress 分类图像描述
  • 大型网站建设公司一万元小型办厂设备
  • flash asp网站足球比赛直播在线观看
  • django可以做多大的网站网站维护技术
  • 网站备案级别免费ppt模板下载应用
  • 中国建设银行集团网站wordpress特点
  • 建设银行网站怎么交学费淄博网络推广公司哪家好
  • 中山外包网站设计装修网站模板下载
  • 秦皇岛做网站公司青岛网站设计案例
  • 东营网站建设电话建筑网站新闻写那些好