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

网站做seo推广 s网站seo排名优化软件

网站做seo推广 s,网站seo排名优化软件,腾讯微信网站建设价格,网站建设的内容是什么目录 一.容器适配器 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/585459.html

相关文章:

  • 企业如何做网站收款游戏论坛源码
  • 网站推广策略方法焦作百姓网免费发布信息
  • 建设银行积分兑换商城网站三文鱼电商代运营
  • 建立公司网站的重点我有云服务器如何建站
  • 什么网站能看男女做暧手机app开发步骤
  • wordpress页面重定向青岛网站的优化
  • 装潢设计网站如何建设电子商务网站
  • 网站建设程序员招聘优秀的设计网站推荐
  • 医药网站建设公司免费域名注册和免费建站
  • 帝国做的网站怎么上传网盘资源搜索神器
  • 网站多数关键词网站建设 m.ykn.cc
  • 奉化市住房和城乡建设局网站萍乡网页设计
  • 文化馆的网站怎么建设网站这么推广
  • 专业网站定制哪家好有没有可以免费制作ppt的app
  • 设计头条seo于刷网站点击
  • 文山 网站建设 滇icp深圳入户申请网站官网
  • 网站开发竞聘报告免费在线做高考试题的网站
  • 网站刷新代码app开发兼职的价位
  • 做电力项目信息的网站香水网站建设规划书
  • 做网站一定要注册公司吗想做代理怎么找商家
  • 搜索敏感词后很多网站打不开了商务网站的推广
  • 广东网站建设公司网络服务网站设计_网站建设_手机网站建设
  • 网站新媒体建设方案云南省建设工程信息服务平台
  • 深圳网站开发公司有哪些网页游戏开服表是什么
  • 网站服务器的作用和功能有哪些做挖机配件销售的网站
  • 提供秦皇岛网站建设哪里有wordpress卖东西
  • 黄页网站软件应用大全市场监督管理局注册公司流程
  • 马关县住房和城乡建设局网站广州自助建站软件
  • 做网站的公司是什么做网站 编程语言
  • 织梦做的的网站首页显示空白网站服务器基本要素有哪些