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

网站开发 erp系统开发推广方案策划

网站开发 erp系统开发,推广方案策划,b2b就是做网站吗,创意网页设计作品目录 一、容器适配器 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://www.dtcms.com/wzjs/456739.html

相关文章:

  • 上海网站原型设计网站建设关键词排名
  • 兰山区住房和城乡建设局网站网络推广课程培训
  • 建设网站空间多少钱班级优化大师官网
  • 做网站可以自由职业吗怎么开网店
  • wordpress文章竖线辽宁好的百度seo公司
  • 云主机怎么上传网站seo网络推广是什么意思
  • 网站设计价格大概多少seo推广小分享
  • 哈尔滨网站建设费用百度一下网页版浏览器百度
  • 网站推广排名教程搜索引擎优化怎么做的
  • 渭南做网站的公司厦门seo屈兴东
  • 做策划的人经常浏览的网站百度免费咨询
  • 上海专业做网站服务商百度客服中心人工在线电话
  • 手机网站开通微信支付搜索引擎营销的名词解释
  • 网站建设南昌网络销售怎么做才能有业务
  • 白云区新闻seo平台
  • 做网站开发的商标注册多少类南宁百度关键词排名公司
  • 免费网站建设 百度一下seo站内优化站外优化
  • 怎么创建收费网站google搜索免费入口
  • 东湖南昌网站建设公司网站制作的费用
  • 广东 网站建设怎样在浏览器上找网站
  • 成都网站建设 推广行南京seo培训
  • 好推建站千锋教育培训机构怎么样
  • 赣州企业网seo关键词快速排名软件
  • 怎么在搜索引擎里做网站网页自己怎样开网站
  • 网站图片计时器怎么做国内时事新闻
  • 手机怎么做电子书下载网站环球贸易网
  • 福田蒙派克10座车图片seo优化广告
  • html网站更新软文营销的成功案例
  • 太原建高铁站十大基本营销方式
  • 大学生兼职网站开发毕设论文有什么推广软件