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

来源:互联网 发布:三娃被软件缠故事 编辑:程序博客网 时间:2024/04/28 21:46

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
原创粉丝点击