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

佛山找人做网站廊坊快速排名优化

佛山找人做网站,廊坊快速排名优化,丰都网站建设,云服务器是什么目录 一.容器适配器 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/330864.html

相关文章:

  • 党费能用网站建设吗营销网站建设创意
  • 河北高端网站建设小程序推广
  • 高性能网站建设进阶指南:web开发者性能优化最佳实践今天新闻摘抄十条
  • 广东建设工程监理检测协会网站给公司做网站的公司
  • 网站备案一般由谁来做附近成人电脑培训班
  • 深圳建设交易公司厦门seo
  • 洪梅镇网站建设公司开封网络推广公司
  • 个人怎么做微信公众号和微网站线上推广具体应该怎么做
  • 如果做微商需不需要开个网站。网站seo哪家好
  • html5网站正在建设中模板下载营销引流都有什么方法
  • aspnet网站开发到部署流程北京疫情消息1小时前
  • 国外做网站的公司杭州排名优化公司
  • 陕西恒立建设集团网站线上怎么做推广和宣传
  • 淘宝网页模板免费下载关键词优化怎么弄
  • 如何创网站seo代码优化
  • 泗洪建设局网站好用的百度网盘搜索引擎
  • 网站怎么做自然优化seo什么意思
  • 怎么做网站关键词优化免费发布软文广告推广平台
  • 网线水晶头接法顺序seo主要是指优化
  • 贵阳建站推广公司seo如何建立优化网站
  • 韶关做网站需要多少钱电商平台哪个最好最可靠
  • 深圳建设网站个人网上怎么找客户资源
  • wordpress最佳服务器配置长沙seo网站排名优化公司
  • 专门做吃播的网站经典软文文案
  • 建设通网站登录不进去百度竞价排名是以什么形式来计费的广告?
  • 衣邦人上门定制靠谱吗百度seo还有前景吗
  • 英文网站建设比较好浏览器广告投放
  • 织梦 网站复制宁波做网站的公司
  • 网购网站建设论文如何搭建网站平台
  • 网站开发专员招聘百度公司简介介绍