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

佛山找人做网站推广发布任务平台app下载

佛山找人做网站,推广发布任务平台app下载,pc 移动的网站开发,企业网站建设及维护目录 一.容器适配器 1.什么是适配器 2.STL标准库中stack和queue的底层结构 3.deque的原理介绍 deque是如何借助其迭代器维护其假想连续的结构呢? 头插 尾插 遍历 4.deque的优缺点 二.stack的模拟实现 三.queue的模拟实现 一.容器适配器 1.什么是适配…

目录

一.容器适配器

1.什么是适配器

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

3.deque的原理介绍 

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

头插

尾插 

遍历 

4.deque的优缺点

二.stack的模拟实现

三.queue的模拟实现


一.容器适配器

1.什么是适配器

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

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

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

3.deque的原理介绍 

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

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

        图中map为中控数组,来控制一维数组buffer中的数据,当中控数组满载时,会进行realloc扩容。

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

        

        迭代器中有4个成员变量,first指向当前buffer数组的头部last指向当前buffer数组尾部cur指向当前buffer数组中访问到的结点node为二级指针,指向中控数组中指向buffer数组的指针。 

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

        deque的start(iterator)用来控制中控数组中所指向的第一个buffer,finish(iterator) 用来控制中控数组中所指向的最后一个buffer。

头插

        对于deque的头插,如果当前first所指向的buffer数组的头部还有空间,则直接在cur所指向的位置插入,如果当前first所指向的buffer数组的头部没有空间,那么在中控数组中重新申请一个buffer,更新first,再在cur位置进行插入操作:

        

尾插 

        对于deque的尾插,如果当前finish所指向的buffer数组的尾部还有空间,则直接在cur所指向的位置插入,如果当前finish所指向的buffer数组的尾部没有空间,那么在中控数组中重新申请一个buffer,更新finish,再在cur位置进行插入操作: 

 

遍历 

        对于deque的遍历,可以通过begin()与end()中cur的比较来进行,当begin()中的cur与end()中的cur相等时,说明遍历已完成,而cur在向后遍历的过程中,与list中的迭代器类似,在当前连续空间走完后,需要更新cur进入下一个buffer继续遍历,所以我们这里要将迭代器的++进行重载,这里进行一个简单的实现:

4.deque的优缺点

优点:

1.头尾插入删除效率很高,适合做stack和queue的默认适配容器。

2.下标随机访问效率也不错,与vector相比差一点

缺点:

1.中间位置插入删除效率一般

2.对比vector和list没有那么极致

二.stack的模拟实现

namespace my_stack
{// 只要支持push_back,pop_back等接口函数接可以作为stack的容器适配器// 将适配器的尾部作为栈的开口方向,从而实现先进后出template<class T, class Container = deque<T>>class stack{public:stack(){}void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}T& top(){return _con.back();}const T& top() const{return _con.back();}size_t size() const{return _con.size();}bool empty() const{return size() == 0;}private:Container _con;};
}

三.queue的模拟实现

namespace my_queue
{// 将容器适配器的头部作为队头,将尾部作为队尾,从而实现先进先出template<class T, class Container = deque<T>>class queue{public:queue(){}void push(const T& x){_con.push_back(x);}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 size() == 0;}private:Container _con;};
}

http://www.dtcms.com/wzjs/426168.html

相关文章:

  • 百度网盟推广的 合作网站深圳百度公司地址在哪里
  • 用jsp做的二手交易网站下载app到手机上并安装
  • 网站开发公司首页网络推广都有哪些平台
  • 17一起做网站客服佛山做网站建设
  • wordpress添加分类目录seo标题知乎关键词优化软件
  • 天津哪家公司做公司网站上海网站seo
  • wordpress旅游主题单页关键词优化费用
  • wordpress 无法更换会员注册页面安卓优化
  • 网站建设周期规划学新媒体运营最好的培训学校
  • 如何用dw做动态网站360优化大师app
  • 广西住房和城乡建设厅领导班子佛山旺道seo
  • 免费 wordpress主题seo流量增加软件
  • 直播app开发费用成都百度seo优化公司
  • 免费做橙光封面的网站个人网页生成器
  • 网站建设钟振森平板电视seo优化关键词
  • 品牌网站建站公司外贸营销网站制作
  • 网站建设方案ppt怎么找关键词
  • wordpress预约插件外贸网站谷歌seo
  • 网站建设 广州网站建设专业公司网站seo优化教程
  • 020网站管理系统模板一个企业seo网站的优化流程
  • 优创智汇高端网站建设网站模板之家官网
  • 有专业做网站的吗企业网站建设哪家好
  • java开发微网站aso优化技术
  • 计算机上网题的模拟网站怎么做网络营销案例2022
  • 开发网站建设公司怎么建免费网站
  • 西亚网站建设科技seo优化工作怎么样
  • 江门网站建设费用如何注册域名网站
  • 红孩子母婴网站开发背景高质量关键词搜索排名
  • 毕节做网站优化网络营销管理系统
  • 汕头企业网页设计重庆网站优化公司