上海网站建设电话020网站模板

diannao/2026/1/18 5:05:30/文章来源:
上海网站建设电话,020网站模板,seo网站首页推广,小公司网站建设目录 容器适配器 STL标准库中stack和queue的底层结构 ​deque deque的原理 deque的缺陷 为什么选择deque作为stack和queue的底层默认容器 stack stack的介绍 stack的函数 stack的模拟实现 queue queue的介绍 queue的函数 queue的模拟实现 priority_queue prior…目录 容器适配器 STL标准库中stack和queue的底层结构 ​deque deque的原理 deque的缺陷 为什么选择deque作为stack和queue的底层默认容器 stack stack的介绍 stack的函数 stack的模拟实现 queue queue的介绍 queue的函数 queue的模拟实现 priority_queue priority_queue的介绍 priority_queue的函数 priority_queue的模拟实现 容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)该种模式是将一个类的接口转换成客户希望的另外一个接口。 STL标准库中stack和queue的底层结构 虽然stack和queue中也可以存放元素但在STL中并没有将其划分在容器的行列而是将其称为容器适配器这是因为stack和队列只是对其他容器的接口进行了包装STL中stack和queue默认使用deque比如 deque deque的原理 deque(双端队列)是一种双开口的连续空间的数据结构双开口的含义是可以在头尾两端进行插入和删除操作且时间复杂度为O(1)与vector比较头插效率高不需要搬移元素与list比较空间利用率比较高。 结论: 1、头尾的插入删除非常适合相比vector和list而言。很适合去做stack和queue的默认适配容器2、中间插入删除多用list3、随机访问多用vector  cur当前数据first和last表示buffer开始和结束node反向指向中控位置方便遍历时找下一个buffer deque并不是真正连续的空间而是由一段段连续的小空间拼接而成实际上deque类似于一个动态二维数组双端队列底层是一段假象的连续空间实际是分段连续的为了维护其“整体连续”以及随机访问的假象落在deque的迭代器身上。 deque的缺陷 与vector比较deque的优势是头部插入和删除时不需要搬移元素效率特别高而且在扩容时也不需要搬移大量的元素因此其效率是必vector高的。与list比较其底层是连续空间空间利用率比较高不需要存储额外字段。但是deque有一个致命缺陷不适合遍历因为在遍历时deque的迭代器要频繁的去检测其是否移动到某段小空间的边界导致效率低下而序列式场景中可能需要经常遍历因此在实际中需要线性结构时大多数情况下优先考虑vector和listdeque的应用并不多而目前能看到的一个应用就是STL用其作为stack和queue的底层数据结构。 为什么选择deque作为stack和queue的底层默认容器 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的优点而完美的避开了其缺陷。 stack stack的介绍 1. stack是一种容器适配器专门用在具有后进先出操作的上下文环境中其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的容器适配器即是对特定类封装作为其底层的容器并提供一组特定的成员函数来访问其元素将特定类作为其底层的元素特定容器的尾部(即栈顶)被压入和弹出。 3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类这些容器类应该支持以下操作 empty判空操作back获取尾部元素操作push_back尾部插入元素操作pop_back尾部删除元素操作 4. 标准容器vector、deque、list均符合这些需求默认情况下如果没有为stack指定特定的底层容器默认情况下使用deque。  stack的函数 函数说明接口说明stack()构造空的栈empty()检测stack是否为空size()返回stack中元素的个数top()返回栈顶元素的引用push()将元素val压入stack中pop()将stack中尾部的元素弹出 stack的模拟实现 #pragma once #include dequenamespace chx {templateclass T, class Container dequeTclass stack{public: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();}bool empty() const{return _con.empty();}size_t size() const{return _con.size();}private://vectorT _con;Container _con;}; } queue queue的介绍 1. 队列是一种容器适配器专门用于在FIFO上下文(先进先出)中操作其中从容器一端插入元素另一端提取元素。 2. 队列作为容器适配器实现容器适配器即将特定容器类封装作为其底层容器类queue提供一组特定的成员函数来访问其元素。元素从队尾入队列从队头出队列。 3. 底层容器可以是标准容器类模板之一也可以是其他专门设计的容器类。该底层容器应至少支持以下操作: empty检测队列是否为空size返回队列中有效元素的个数front返回队头元素的引用back返回队尾元素的引用push_back在队列尾部入队列pop_front在队列头部出队列 4. 标准容器类deque和list满足了这些要求。默认情况下如果没有为queue实例化指定容器类则使用标准容器deque。 queue的函数 函数声明接口说明queue()构造空的队列empty()检测队列是否为空是返回true否则返回falsesize()返回队列中有效元素的个数front()返回队头元素的引用back()返回队尾元素的引用push()在队尾将元素val入队列pop()将队头元素出队列 queue的模拟实现 #pragma once#pragma once #include dequenamespace chx {templateclass T, class Container dequeTclass queue{public:void push(const T x){_con.push_back(x);}void pop(){_con.pop_front();}T back(){return _con.back();}T front(){return _con.front();}const T back() const{return _con.back();}const T front() const{return _con.front();}bool empty() const{return _con.empty();}size_t size() const{return _con.size();}private:Container _con;}; } priority_queue priority_queue的介绍 1. 优先队列是一种容器适配器根据严格的弱排序标准它的第一个元素总是它所包含的元素中最大的。 2. 此上下文类似于堆在堆中可以随时插入元素并且只能检索最大堆元素(优先队列中位于顶部的元素)。 3. 优先队列被实现为容器适配器容器适配器即将特定容器类封装作为其底层容器类queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出其称为优先队列的顶部。 4. 底层容器可以是任何标准容器类模板也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问并支持以下操作 empty()检测容器是否为空size()返回容器中有效元素个数front()返回容器中第一个元素的引用push_back()在容器尾部插入元素pop_back()删除容器尾部元素 5. 标准容器类vector和deque满足这些需求。默认情况下如果没有为特定的priority_queue类实例化指定容器类则使用vector。 6. 需要支持随机访问迭代器以便始终在内部保持堆结构。容器适配器通过在需要时自动调用算法函数make_heap、push_heap和pop_heap来自动完成此操作。 priority_queue的函数 优先级队列默认使用vector作为其底层存储数据的容器在vector上又使用了堆算法将vector中元素构造成堆的结构因此priority_queue就是堆所有需要用到堆的位置都可以考虑使用priority_queue。 注意默认情况下priority_queue是大堆如果要创建小堆将第三个模板参数换成greater比较方式。#include functional // greater算法的头文件 函数声明接口说明priority_queue()/priority_queue(first, last)构造一个空的优先级队列empty( )检测优先级队列是否为空是返回true否则返回 falsetop( )返回优先级队列中最大(最小元素)即堆顶元素push(x)在优先级队列中插入元素xpop()删除优先级队列中最大(最小)元素即堆顶元素 priority_queue的模拟实现 #pragma once #includeiostream #includevector using namespace std; namespace chx {templateclass T, class Comtainer vectorT, class Compare lessTclass priority_queue{public:priority_queue(){}templateclass InputIteratorpriority_queue(InputIterator first, InputIterator last){while (first ! last){_con.push_back(first);first;}// 建队for (int i (_con.size() - 1 - 1) / 2; i 0; --i){adjust_down(i);}}void push(const T x){_con.push_back(x);adjust_up(_con.size() - 1);}// logNvoid adjust_up(size_t child){Compare com;size_t parent (child - 1) / 2;while (child 0){//if (_con[child] _con[parent])//if (_con[parent] _con[child])if (com(_con[parent], _con[child])){std::swap(_con[child], _con[parent]);child parent;parent (child - 1) / 2;}else{break;}}}void adjust_down(size_t parent){Compare com;size_t child parent * 2 1;while (child _con.size()){// 选出左右孩子中大的那一个//if (child1 _con.size() _con[child1] _con[child])//if (child 1 _con.size() _con[child] _con[child 1])if (child 1 _con.size() com(_con[child], _con[child 1])){child;}//if (_con[child] _con[parent])//if (_con[parent] _con[child])if (com(_con[parent], _con[child])){std::swap(_con[child], _con[parent]);parent child;child parent * 2 1;}else{break;}}}void pop(){std::swap(_con[0], _con[_con.size() - 1]);_con.pop_back();adjust_down(0);}bool empty()const{return _con.empty();}const T top(){return _con[0];}size_t size()const{return _con.size();}private:Comtainer _con;}; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长沙网站建设去哪好开源免费企业网站系统

中学时代与谁共生活?旧日笑脸的姓名是否还记得,那些宣誓曾经烂心窝,如今再喊够勇敢吗?当时有那么多梦想没去经历过,如今有在实现吗?当初遗憾不够努力痛苦过,什么时候也开始学会适应地生活。冒险…

网站上的地图怎么做商务网站创建多少钱

视频演示地址 https://www.bilibili.com/video/BV17j421X7Zc/ 【Tauri】(2):使用Tauri应用开发,使用开源的Chatgpt-web应用做前端,使用rust 的candle做后端,本地运行小模型桌面应用 1,做一个免…

响水网站建设公司wordpress下载站源码

Zookeeper集群的角色: Leader 和 follower (Observer)zk集群最好配成奇数个节点只要集群中有半数以上节点存活,集群就能提供服务本事例采用版本:zookeeper-3.4.5 虚拟机:zk1 zk2 zk3/****************************************…

mean网站开发织梦网站logo

Nginx配置相关结构划分的技巧原文来自:http://developer.51cto.com/art/201003/190953.htm Nginx配置需要一定的技巧,我们在不断的使用和维护中就会发现这些,接下来就向大家介绍下有关Nginx配置的相关技巧。我目前的Nginx配置是拆散的&#x…

免费模板网站都有什么区别口碑好的家装前十强

最近需要用python写一个菜单,折腾了两三天才搞定,现在记录在此,需要的朋友可以借鉴一下。备注:文章引用非可执行完整代码,仅仅摘录了关键部分的代码环境数据库:mysqlpython:3.6表结构CREATE TAB…

誓做中国最大钓鱼网站网站设计所用的软件

我们有时候用chrome浏览器获取Network中XHR的数据,得到的是Json类型,有时也可能是python中的字典类型,如果获取的数据比较复杂,通过简单的处理我们是无法拿到我们需要的数据的,这时我们就需要对数据进行转换处理&#…

免费域名网站建设找做网站公司

如果 Kubernetes 部署在诸如 AWS、GCE、Azure 等公有云上,可以直接使用云硬盘作为 Volume,下面是 AWS Elastic Block Store 的例子: 要在 Pod 中使用 ESB volume,必须先在 AWS 中创建,然后通过 volume-id 引用。其他云…

环保行业网站开发注册360建筑网平台

阿里妹导读:阿里云已经成功地规模化落地云原生,26日的 KubeCon 大会上,CNCF TOC 和阿里云资深技术专家李响发表主题演讲,分享了阿里巴巴在规模扩展、可靠性、开发效率、迁移策略等方面的经验,并探讨云原生的落地及应对…

做网站应该会什么软件wordpress 拍卖主题

本文介绍微信支付中订单查询功能的实现。 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/wxpay-order-query.html 一、订单查询 因为某一方技术的原因,可能导致商户在预期时间内都收不到最终支付通知,此时商户可以通过该…

网站建设网站排名怎么做苏州建设网站公司在什么地方

一个人的职业选择和成长道路会受到很多因素的影响。贾尼尼,这位美国第三大银行——美洲银行的创始人,他的银行家之路却与父亲的死有关。 1878年的一天,贾尼尼8岁的时候,同村的一个葡萄农,因为还不起向贾尼尼父亲借的一…

网站首页流程图河南注册公司流程

emit 属性:用于创建自定义事件,接收子组件传递过来的数据。 注意:如果自定义事件的名称,和原生事件的名称一样,那么只会触发自定义事件。 setup 语法糖写法请见:《Vue3 子传父 组件传参 defineEmits》 语…

门户网站用什么程序做微信开发者平台登录

第1章 异常处理 1.1 什么是异常? 1.1.1 描述 #1 什么是异常? # 异常是错误发生的信号,一旦程序出错,就会产生一个异常,应用程序未处理该异常, # 异常便会抛出,程序随之终止 异常就是程序运行时发生错误的信…

做羞羞的事的视频网站手机端网站制作

文章目录一、需求文档说明二、脚本解释/说明三、脚本内容3.1. 案例脚本3.2. 案例脚本升级一、需求文档说明 序号要求说明①协议使用ftp协议远程下载②文件类型.zip③文件名ac_UPpp④远程下载目录用户根目录(不需要切换目录)⑤本服务器下载存放目录/blacklist/xmldata/Lists 二…

网站建设分期收费大型网站都怎么做推广

前言 简单记录一下在Docker学习过程中,关于网络模式和容器网络互连的基本概念。 一、Docker的网络模式 (1)桥接模式:Docker会为每个容器创建一个虚拟网卡,并将这些虚拟网卡连接到一个虚拟交换机上,从而实…

投资网站策划苏州网站小程序app开发公司

Linux renice命令介绍 renice命令在Linux中用于修改已经运行的进程的优先级。这个命令允许你改变一个已经运行的进程的调度优先级。如果我们给一个进程设置了更高的优先级,那么内核将为该进程分配更多的CPU时间。 Linux renice命令适用的Linux版本 renice命令在所…

可以做微信推文的网站自己可以建设环保公益网站吗

最近在用数字人简易方案,看到了sadtalker虽然效果差,但是可以作为一个快速方案,没有安装sd的版本,随便找了个一键安装包 设置如上 使用倒是非常简单,但是出现一个问题,就是输出的mp4都出马赛克了 界面上却…

asp.net做电商网站设计网站域名后缀的意思

高阶组件和高阶函数都是在函数式编程中常见的概念。 高阶组件(Higher-Order Component, HOC)是一种函数,接受一个组件作为参数,并返回一个新的组件。它可以用来增强现有的组件,给它添加额外的功能或属性。高阶组件在R…

网站seo置顶 乐云践新专家酒店网站开发

我为Maven创建了一个示例Groovy项目,该项目在一个项目中混合了Spock测试和JUnit 5测试。 在下一节中,我将描述如何设置这种Maven项目。 在项目中启用Groovy 首先,您必须在项目中启用Groovy。 一种可能性是将GMavenPlus插件添加到您的项目中。…

网站做会员系统济南旅游网站建设现状

std::function是一个模板类&#xff0c;基本可作为函数指针的代替品&#xff0c;具备更多功能&#xff0c;特别是与函数对象及bind配合使用。使用std::function时&#xff0c;需要添加头文件 #include <functional> 1.定义函数指针 18行&#xff0c;定义了一个函数指针类…