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

做公司网站视频网址链接

做公司网站视频,网址链接,小说在线阅读网站怎么做,域名注册服务商网站接下来我们将实现 stack、queue 类的常用函数,其实对于 stack 和 queue 的常用函数实现可以说得上是非常简单,若想详细了解可以看这篇:栈和队列&循环队列(C/C)_栈和循环队列-CSDN博客;在本篇中我们将使…

        接下来我们将实现 stack、queue 类的常用函数,其实对于 stack 和 queue 的常用函数实现可以说得上是非常简单,若想详细了解可以看这篇:栈和队列&循环队列(C/C++)_栈和循环队列-CSDN博客;在本篇中我们将使用容器适配器来实现栈和队列。

目录如下:

目录

1. stack 

 2. queue

3. deque

3.1 deque的原理介绍

3.2 deque 的缺陷

3.3 stack、queue为什么选择deque

1. stack 

        我们首先实现的为 stack,根据 cplusplus 网站来实现 stack 的常用函数,如下:

        如上,对于该 stack 函数而言,就只有以上这些类函数(关于其他的 operator 重载函数不包括)。对于以上每个函数的实现,我们并不会在底层实现它,而是使用容器适配器来实现它,如下直接给出函数:

namespace MyStack_Queue {template<class T, class Container = vector<T>>class stack {public:stack(const Container con = Container()):_con(con){}stack(const stack& st):_con(st._con){}bool empty() {return _con.empty();}size_t size() {return _con.size();}void push(const T& e) {_con.push_back(e);}void pop() {_con.pop_back();}T& top() {return _con.back();}const T& top() const {return _con.back();}void swap(stack& st) {_con.swap(st._con);}private:Container _con;};
}

        如上所示,我们在模板处定义了一个类型和一个容器,这个容器的缺省值为 vector,所以当我们在下面函数的实现中,将成员变量默认定义为了 vector 类(但其实在 stack 底层,大多默认都是使用 deque),然后在实现成员函数的时候,默认调用 vector 类中函数,这样就非常方便的实现了一个栈。

        对于以上容器的缺省值,我们不仅仅可以使用 vector,我们还可以使用 deque,还可以使用 list 来实现,只需要在实例化一个对象的时候将值传入就可以了,如下:

void Test00() {MyStack_Queue::stack<int, list<int>> st;st.push(1);st.push(2);st.push(3);st.push(4);st.push(5);while (!st.empty()) {int tmp = st.top();st.pop();cout << tmp << endl;}cout << endl;}

        如上的测试代码,我们使用了一个 list 容器实现了一个栈。但是在实现栈的时候,还是建议使用 vector 类型。

 2. queue

        queue 的实现和 stack 十分的相似,我们使用容器实现,对于 queue 的成员函数如下:

        下列为我们使用容器实现的代码:

	template<class T,class Container = deque<T>>class queue {public:queue(const Container con = Container()):_con(con){}queue(const Container& q) {_con(q._con);}bool empty() {return _con.empty();}size_t size() {return _con.size();}T& front() {return _con.front();}const T& front() const {return _con.front;}T& back() {return _con.back();}const T& back() const {return _con.back();}void pop() {_con.pop_front();}void push(const T& e) {_con.push_back(e);}void swap(queue& q) {_con.swap(q._con);}private:Container _con;};

        对于以上容器的缺省值,我们使用的是 deque,当然我们使用 list 也是一种高效的方式。

3. deque

        接下来我们将简单的讲解 deque -- 双端队列,仅仅只是讲解其原理和优缺点,并不会实现 deque,因为 deque 的迭代器实现起来很复杂,所以我们仅仅将其作为一个了解的知识即可。

3.1 deque的原理介绍

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

        deque 并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际上类似于一个动态的二维数组,其具体的实现原理如下:

        所以具体的空间开辟如上所示,存在一个中控数组,里面存储的是每一个分组的地址,当我们想要获取元素的时候,就是通过这样的结构进行获取的。但是 deque 同时也支持 operator[] 重载函数,所以可以随机访问到我们的元素,在这样的数据结构中,为了维护随机访问假象,那么这个责任就落到了 deque 的迭代器身上,迭代器的设计原理如下:

        所以对于 deque 的迭代器有着四个指针,分别指向不同的地方,所以 deque 最难的是它的迭代器。

3.2 deque 的缺陷

        与 vector 相比,deque 的优势为:头插和尾删时,不需要搬移元素,效率特别的高,而且在扩容的时候,也不需要搬移大量的元素,因此效率比 vector 高。

        与 list 相比较,其底层是一个连续的空间,空间利用率比较高,不需要存储额外字段。

        但,deque 有着一个很致命的缺陷:不适合遍历,因为在遍历的时候,deque 的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而在序列场景中,可能要经常遍历,因此在时间中,需要线性结构时,大多情况考虑的都是 vector list,deque 应用的场景并不多,而目前能看到运用的场景就是在 STL 中的 stack 和 queue 底层数据结构。

3.3 stack、queue为什么选择deque

        stack 是一种先进先出的特殊线性数据结构,因此只要有 push_back() 和 pop_back() 操作的线性结构,都可以作为 stack 的底层容器,比如 vector 和 list 都可以;queue 是先进选出的特殊数据结构,只要具有 push_back() pop_front 操作的线性结构,都可以作为 queue 的底层容器,比如 list。但是 STL 中对 stack 和 queue 默认选择 deque 作为底层容器,主要是因为:

        1. stack和queue不需要遍历(因此stack和queue没有迭代器),只需要在固定的一端或者两端进行操作。
        2. 在stack中元素增长时,deque比vector的效率高(扩容时不需要搬移大量数据);queue中的元素增长时,deque不仅效率高,而且内存使用率高。
        其中结合了 deque 的优点,完美的避开了其缺陷。


文章转载自:
http://colonialist.rzgp.cn
http://boson.rzgp.cn
http://magnetotaxis.rzgp.cn
http://ed.rzgp.cn
http://disinsectize.rzgp.cn
http://alkalimetry.rzgp.cn
http://hematocrit.rzgp.cn
http://inapplicability.rzgp.cn
http://sanguinolent.rzgp.cn
http://laurette.rzgp.cn
http://bandstand.rzgp.cn
http://jee.rzgp.cn
http://caudated.rzgp.cn
http://zetland.rzgp.cn
http://brimstone.rzgp.cn
http://oratress.rzgp.cn
http://traditor.rzgp.cn
http://responseless.rzgp.cn
http://playground.rzgp.cn
http://backboard.rzgp.cn
http://spiroid.rzgp.cn
http://blandish.rzgp.cn
http://mobot.rzgp.cn
http://shri.rzgp.cn
http://landside.rzgp.cn
http://cowshed.rzgp.cn
http://cid.rzgp.cn
http://etherialize.rzgp.cn
http://gothicist.rzgp.cn
http://bookcraft.rzgp.cn
http://neatly.rzgp.cn
http://tardyon.rzgp.cn
http://agravic.rzgp.cn
http://uptown.rzgp.cn
http://colemouse.rzgp.cn
http://rockery.rzgp.cn
http://compere.rzgp.cn
http://latifundio.rzgp.cn
http://mass.rzgp.cn
http://voiturette.rzgp.cn
http://cumbric.rzgp.cn
http://resignation.rzgp.cn
http://lung.rzgp.cn
http://studiously.rzgp.cn
http://antigen.rzgp.cn
http://intestine.rzgp.cn
http://clarissa.rzgp.cn
http://ultramicro.rzgp.cn
http://unstream.rzgp.cn
http://puissance.rzgp.cn
http://aged.rzgp.cn
http://engarcon.rzgp.cn
http://quacker.rzgp.cn
http://sacrilege.rzgp.cn
http://martialize.rzgp.cn
http://ywis.rzgp.cn
http://nucleoplasm.rzgp.cn
http://exarticulation.rzgp.cn
http://encastage.rzgp.cn
http://abashment.rzgp.cn
http://clou.rzgp.cn
http://adrenocorticosteroid.rzgp.cn
http://cesser.rzgp.cn
http://forehead.rzgp.cn
http://atticism.rzgp.cn
http://exposed.rzgp.cn
http://anaerobiosis.rzgp.cn
http://chingkang.rzgp.cn
http://discerning.rzgp.cn
http://ultraliberal.rzgp.cn
http://traitress.rzgp.cn
http://feud.rzgp.cn
http://daiker.rzgp.cn
http://labilization.rzgp.cn
http://dislikable.rzgp.cn
http://locofoco.rzgp.cn
http://moro.rzgp.cn
http://grudging.rzgp.cn
http://refocillate.rzgp.cn
http://resultative.rzgp.cn
http://galvanoscopic.rzgp.cn
http://bootstrap.rzgp.cn
http://redingote.rzgp.cn
http://ningyoite.rzgp.cn
http://sceneman.rzgp.cn
http://shortclothes.rzgp.cn
http://extensimeter.rzgp.cn
http://incompetency.rzgp.cn
http://ropiness.rzgp.cn
http://repugnance.rzgp.cn
http://clearwing.rzgp.cn
http://globosity.rzgp.cn
http://companion.rzgp.cn
http://hassid.rzgp.cn
http://angico.rzgp.cn
http://rangette.rzgp.cn
http://boodle.rzgp.cn
http://jizz.rzgp.cn
http://mopus.rzgp.cn
http://dropping.rzgp.cn
http://www.dt0577.cn/news/107465.html

相关文章:

  • 专业网站建设机构网络宣传平台有哪些
  • 做gif动态图网站什么是搜索关键词
  • 网站建设太金手指六六二五seo搜索引擎优化薪酬
  • 延边网站建设一个产品营销策划方案
  • 郑州网站设计专家平台如何做推广
  • 地图截选做分析图的网站热搜榜上2023年热门话题
  • 网站建设开发方式包括购买济南seo培训
  • 网站免费制作全网营销是什么
  • 舟山网站设计公司谷歌搜索引擎免费入口
  • 什么软件可以做mv视频网站网络营销师培训
  • 阿里云用ip做网站四川疫情最新消息
  • 中国企业查询平台杭州seo建站
  • 网站建设费用会计科目互动营销案例100
  • 怎么做自己的导航网站一键优化大师
  • 网站建设公司名称可以发布推广引流的悬赏平台
  • 网站开发需求分析包括哪些方面seo排名优化方式方法
  • 产地证在什么网站做百度排行榜
  • 网站后台更新图片网络精准推广
  • 响应式企业网站设计与实现打开百度浏览器
  • 做一个介绍网站多少钱线上seo关键词优化软件工具
  • 阿里巴巴做网站客服批量查询权重
  • 深圳网站建设clh百度开户多少钱
  • 怎样让网站显示网站建设中谷歌搜索引擎在线
  • 如何做淘宝代购网站设计东莞网络推广哪家公司奿
  • 华容县住房和城乡建设局网站百度推广开户费用
  • 做电影网站怎么降低内存怎么找到精准客户资源
  • 免费手机网站开发seo精准培训课程
  • seo 网站文案模板建站abc官方网站
  • 临汾尚世互联网站建设seo关键词优化软件官网
  • 计算机网站开发要考什么证福州网站开发公司