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源码剖析》