容器适配器
STL提供三种容器适配器:queue,priority_queue和stack。每一种适配器都是对一种顺序容器的包装。容器适配器的作用是简化接口,只提供那些stack和queue抽象所需要的功能。例如,适配器没有提供迭代器,也没有提供同时插入或删除多个元素的功能。
一 queue(队列)
queue容器适配器定义在头文件<queue>中,提供标准的”先入先出“语义”,通常情况下,queue也写成模板形式:
template<class T,class Container = deque<T>> class queue;
T模板参数指定了要保存在queue中的数据类型,第二个模板参数指定了queue适配的底层容器,由于queue要求 顺序容器同时支持push_back()和pop_front()这两个操作,故只有两个內建的选项:list和deque。默认为deque。
queue的操作:queue的接口非常简单,只有8个方法,再加上构造函数和普通的比较运算符。
push()和emplace()在queue尾部添加一个元素,pop()从queue头部移除元素。
通过front()和back()可以分别获取第一个和最后一个元素的引用,而不会删除
元素。queue还支持size(),empty()和swap()操作。
二 priority_queue(优先队列)
定义在<queque>,模板定义为:
template<class T,class Container = vector<T>,class Compare = less<T>>;
less 是一个类模板,这个类模板支持两个类型为T的元素通过operator<运算符进行
比较,以此来确定队列中的优先级。
priority_queue的头元素是优先级最高的,默认情况下优先级是通过operator<运算符
判断的,比其他元素小的元素的优先级比其他元素低,
priority_queue操作:通过push()和emplace()方法插入元素,通过pop()删除元素,
通过top()返回头元素的const引用。没有提供获取尾部元素的机制。同样支持size()
empty()和swap()方法。