stl之适配器容器——stack, queue, priority_queue

stack

         stl实现stack的方法:以某种既有容器作为底部结构,将其接口改变,使之符合“先进后出”的特性,形成一个stack。这种“修改某物接口,形成另一种风貌”的方式,成为adapter(适配器),在设计模式中又叫adapter模式,因此,stack被归类为container adapter。其方法包括:empty, size, top, push, pop.

         要作为stack的底层容器,需要提供以下几种方法:

         empty,size,back,push_back,pop_back

         所以,stl库中的vector,list, slist, deque都可以作为stack的底层容器。另外,stl中stack默认的底层容器是deque。

ps:由于stack的先进后出性质,stack不提供遍历功能,也没有迭代器。

queue

         queue是一种“先进先出”容器,支持的方法有:empty, size, front, back, push, pop;其实现方式同stack一样,是用适配器模式实现。要作为stack的底层容器,需提供:empty, size, front, back, push_back, pop_back方法;因此,stl中deque和list都可以作为queue的底层容器,缺省使用deque实现。

priority_queue

         这个也是个用适配器模式实现的容器,缺省使用vector,利用heap进行排序。

         缺省情况下,priority_queue利用一个max_heap实现。后者以一个vector表现出complete binary tree,priority_queue可用于按优先级(权值)排序的任务。

方法:

empty, size, top, push, push, pop

实现依赖与heap相关的方法:

make_heap //创建一个最大堆复杂度为n

pop_heap //将头元素和尾元素交换,然后将除最大元素外的其余元素重排,复杂度为lg(n)

push_heap //在堆中插入一个元素  复杂度为lg(n)

相关知识参考堆排序。

参考资料:侯捷《stl源码剖析》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值