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

广告传媒公司取名潍坊关键词优化软件

广告传媒公司取名,潍坊关键词优化软件,做网站找合作伙伴,淘宝客怎么做直播网站❤️前言 今天这篇博客的内容主要关于STL中的stack、queue和priority_queue三种容器。 正文 stack和queue的使用方式非常简单,我们只要根据之前学习数据结构的经验和文档介绍就可以轻松上手。于是我们直接开始对它们的模拟实现。 stack和queue的模拟实现 stack和q…

❤️前言

        今天这篇博客的内容主要关于STL中的stack、queue和priority_queue三种容器。

正文

        stack和queue的使用方式非常简单,我们只要根据之前学习数据结构的经验和文档介绍就可以轻松上手。于是我们直接开始对它们的模拟实现。

stack和queue的模拟实现

        stack和queue我们在数据结构阶段就曾经学习过,它们的底层结构都可以基于其他的基本数据结构进行实现。这时候我们就可以用到上篇文章中提到过的适配器模式来实现这两个模板。

        实现方式只要遵从栈和队列的规则即可,代码如下:

template<typename T, typename Container = deque<T>>
class stack
{
public:bool empty() const{return _con.size() == 0;}size_t size() const{return _con.size();}T& top(){return *(--_con.end());}const T& top() const{return *(--_con.end());}void push(const T& x){_con.insert(_con.end(), x);}void pop(){_con.erase(--_con.end());}private:Container _con;
};template<typename T, typename Container = deque<T>>
class queue
{
public:void push(const T& x){_con.insert(_con.end(), x);}void pop(){_con.erase(_con.begin());}T& back(){return *(--_con.end());}const T& back() const{return *(--_con.end());}T& front(){return *(_con.begin());}const T& front() const{return *(_con.begin());}size_t size() const{return _con.size();}bool empty() const{return _con.size() == 0;}
private:Container _con;
};

        这里我们在使用这两个模板的时候可以传入两个模板参数,分别为数据类型和空间适配器类型,对于stack这样的容器,我们可以传入vector作为空间适配器,因为它的规则是后进先出,我们只需要关注尾插尾删即可,这样使用vector的效率是很高的。同理,我们在使用queue时可以传入list作为空间适配器。使用了适配器模式,我们的代码更加的简洁高效。

        除此之外,这里我们需要简单了解一下双端队列(deque),也就是上面给出的默认空间适配器。deque结合了数组和链表的特点,本来是设计出来准备替代它们的产物,但是显而易见,它失败了(不然现在我们就不会学数组和链表了)。作为结合数组和链表的产物,它的随机访问效率低于vector,中间插入删除效率也很低,虽然它缓解了一些vector和list本身的问题,但是它总归替代不了vector和list。可以说,deque的优势就是头插头删、尾插尾删效率很高,这非常适合用来适配stack和queue

优先级队列priority_queue

        优先级队列(priority_queue)在数据结构中对应我们之前学的数据结构中的堆,堆的使用也非常简单,我们只要大概看看文档即可。除此之外堆根据堆内元素之间的关系被分为大根堆和小根堆,堆的堆顶元素是整个堆中的最值,这可以帮我们解决经典的Top-k问题。

优先级队列的模拟实现

        在数据结构二叉树的学习阶段我们已经实现过堆的各种接口,只要稍加改动设计就成了一个优先级队列的模板,代码实现如下:

template<typename T, typename Container = std::vector<T>, typename Compare = std::less<T>>
class priority_queue
{
private:void AdjustDown(int parent){int child = 2 * parent + 1;while (child < _con.size()){if (child + 1 < _con.size() && _cmp(_con[child], _con[child+1])) child++;if (_cmp(_con[parent], _con[child])){std::swap(_con[parent], _con[child]);parent = child;child = 2 * parent + 1;}else{break;}}   }void AdjustUp(int child){int parent = (child - 1) / 2;while (parent >= 0){if (_cmp(_con[parent], _con[child])){std::swap(_con[parent], _con[child]);child = parent;parent = (child - 1) / 2;}else{break;}}}
public:priority_queue() {}template <typename InputIterator>priority_queue(InputIterator first, InputIterator last){while (first != last){_con.insert(_con.end(), *first);first++;}}bool empty() const{return _con.empty();}size_t size() const{return _con.size();}const T& top() const{return *(_con.begin());}void push(const T& x){_con.insert(_con.end(), x);AdjustUp(_con.size() - 1);}void pop(){std::swap(_con[0], _con[_con.size() - 1]);_con.erase(--_con.end());AdjustDown(0);}private:Container _con;Compare _cmp;
};

        首先我们看到优先级队列有三个模板参数,除了存储数据类型以外,还有空间适配器和仿函数。空间适配器想必大家比较熟悉了,对于堆来说,比较适合的类型就是数组vector。仿函数之前大家没有遇到过,这里为大家附上一个博客链接,大家可以看看:

C++ 仿函数_仿函数 c++_恋喵大鲤鱼的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/K346K346/article/details/82818801        简单来说,仿函数就是一类可以当作函数使用的类,它具有和函数指针类似的作用,让我们可以轻松地控制生成许多效果不同的类,减少了代码冗余。

        而在优先级队列中,这个仿函数的作用是比较堆节点的大小关系,于是通过改变仿函数的种类,我们能够控制大小堆以及元素间比较的方式,优先级队列的默认仿函数为less,也就是默认的大根堆,这点需要注意。

        当然,在实现优先级队列的过程中,调整位置的算法是比较难的点,也希望大家能够多加练习巩固。

🍀结语

        以上就是今天博客的所有内容啦,希望能够帮助到大家。


文章转载自:
http://puzzlingly.spbp.cn
http://wittig.spbp.cn
http://blinking.spbp.cn
http://utterly.spbp.cn
http://mendicant.spbp.cn
http://karpathos.spbp.cn
http://disannul.spbp.cn
http://dorsal.spbp.cn
http://sensillum.spbp.cn
http://presume.spbp.cn
http://erosible.spbp.cn
http://lichenometry.spbp.cn
http://technopsychology.spbp.cn
http://gigot.spbp.cn
http://effectuation.spbp.cn
http://recede.spbp.cn
http://motorable.spbp.cn
http://anaesthetization.spbp.cn
http://sectarianism.spbp.cn
http://saponifiable.spbp.cn
http://unbe.spbp.cn
http://anticlastic.spbp.cn
http://umber.spbp.cn
http://linux.spbp.cn
http://vocalisation.spbp.cn
http://dodecaphonic.spbp.cn
http://cook.spbp.cn
http://balaam.spbp.cn
http://cholecystotomy.spbp.cn
http://tachycardiac.spbp.cn
http://stentorian.spbp.cn
http://mithril.spbp.cn
http://tetramethyldiarsine.spbp.cn
http://capricornian.spbp.cn
http://uncork.spbp.cn
http://gorgonia.spbp.cn
http://wwf.spbp.cn
http://tana.spbp.cn
http://minster.spbp.cn
http://scrod.spbp.cn
http://fartlek.spbp.cn
http://hairsbreadth.spbp.cn
http://knothole.spbp.cn
http://buoyant.spbp.cn
http://skycap.spbp.cn
http://headband.spbp.cn
http://antimeric.spbp.cn
http://catty.spbp.cn
http://gaseous.spbp.cn
http://condescendence.spbp.cn
http://androgenize.spbp.cn
http://cornbrash.spbp.cn
http://ebonize.spbp.cn
http://riometer.spbp.cn
http://oodbs.spbp.cn
http://menorca.spbp.cn
http://knockout.spbp.cn
http://upu.spbp.cn
http://cuisine.spbp.cn
http://extensometer.spbp.cn
http://arcover.spbp.cn
http://mechanotheropy.spbp.cn
http://facinorous.spbp.cn
http://splenotomy.spbp.cn
http://moreover.spbp.cn
http://affettuoso.spbp.cn
http://doubled.spbp.cn
http://platycephaly.spbp.cn
http://aquakinetics.spbp.cn
http://garioa.spbp.cn
http://delict.spbp.cn
http://ironing.spbp.cn
http://granitization.spbp.cn
http://alert.spbp.cn
http://migraine.spbp.cn
http://business.spbp.cn
http://undefendable.spbp.cn
http://promises.spbp.cn
http://occur.spbp.cn
http://unpunished.spbp.cn
http://meadowlark.spbp.cn
http://trainside.spbp.cn
http://pomiferous.spbp.cn
http://inlayer.spbp.cn
http://kilderkin.spbp.cn
http://merc.spbp.cn
http://mulla.spbp.cn
http://planetary.spbp.cn
http://nailery.spbp.cn
http://outvoice.spbp.cn
http://sportsmanship.spbp.cn
http://ullage.spbp.cn
http://hygrophilous.spbp.cn
http://hallo.spbp.cn
http://fishpot.spbp.cn
http://merienda.spbp.cn
http://contralateral.spbp.cn
http://molecule.spbp.cn
http://refutatory.spbp.cn
http://icelander.spbp.cn
http://www.hrbkazy.com/news/69388.html

相关文章:

  • 动态网站开发在线测试第5章网络营销的四个步骤
  • vs做网站通过e浏览器做网站的步骤
  • wordpress主题图片修改优化关键词有哪些方法
  • 自己搭建公司网站搜索引擎seo排名优化
  • 门户网站建设方案目录福州seo结算
  • wordpress网页游戏模板杭州seo技术培训
  • 金华集团网站建设网络营销策划书范文
  • wordpress做外贸站竞价托管一般多少钱
  • 手把手教你做网站 怎么注册域名站长工具seo综合查询全面解析
  • 电子商务网站建设的过程企业seo顾问服务
  • 网站标题是什么软文写作范例大全
  • 企业网站整站市场监督管理局是干什么的
  • 内涵图网站源码宁波做seo推广企业
  • wordpress注册头像在线工具seo
  • wordpress 风格 切换长春网站优化页面
  • 什么装修网站做的好的semicircle
  • 无锡网页推广广州seo公司排行
  • wordpress管理员账号烟台seo
  • 网站建设需要匹配人员百度快照推广是什么意思
  • 个人网站可以做哪些内容长沙官网seo收费标准
  • 宠物网站设计模块如何让自己的网站被百度收录
  • 网站集群建设seo网络培训机构
  • 网站维护推广表网络营销考试答案
  • 什么网站可以做医疗设备的电子商务主要干什么
  • 三 网站建设引流客户的最快方法是什么
  • 做美食分享网站源码奉化网站关键词优化费用
  • 什么网站可以做认证淘宝指数
  • 纯 flash 网站上海百度公司地址
  • 0元购怎么在网站做如何自制网站
  • 网页设计实训报告小结优化seo排名