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

网站开发 erp系统开发seo管理与优化期末试题

网站开发 erp系统开发,seo管理与优化期末试题,装修注意事项及细节,个人作品网站怎么做目录 一、容器适配器 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/293228.html

相关文章:

  • 做网站怎么才会被百度收录软文范例大全1000字
  • 买空间域名做网站世界杯最新排名
  • jeecg 做网站seo优化名词解释
  • 用QQ群做网站排名郑州seo推广外包
  • 网站双线主机优势如何用google搜索产品关键词
  • 做网站运营需要什么证线下推广活动策划方案
  • 如何做带后台的网站网络营销毕业论文范文
  • 天猫网站是怎么做seo优化的网络优化有前途吗
  • 部分网站建设管理不规范上海seo外包公司
  • wordpress 小说多站网络运营课程培训班
  • 买域名自己做网站地推项目发布平台
  • 党员网站管理系统seo费用
  • 界首做网站网站seo啥意思
  • 北京市规划建设委员会网站百度推广网址是多少
  • 电子商务发展现状百度seo排名优化助手
  • 百度盘古做网站国外免费域名
  • wordpress资讯站模板网络推广方案的基本思路
  • 网络 网站今天最新军事新闻视频
  • 乐清建设网站广告软文是什么意思
  • 怎么看一个网站做没做竞价广州品牌营销策划公司排名
  • 空间站免费版下载互联网推广销售
  • 快速做课件的网站2022年seo最新优化策略
  • 制作小程序代码晨阳seo
  • 短视频运营公司网站建设无锡哪里有做网站的
  • WordPress减少数据库占有正规网络公司关键词排名优化
  • 化工销售怎么做网站网站策划方案书
  • 知名网站的org域名网站网络营销公司
  • app脚本制作教程优化软件有哪些
  • 怎样自己做电影网站产品网络推广方式
  • 嘉兴平湖网站建设深圳google推广