您的位置:首页 > 其它

STL容器和迭代器用法归纳(3)

2008-03-02 21:49 260 查看
STL提供了三个容器适配器:queue、priority_queue、stack。这些适配器都是包装了某个顺序容器的包装器(适配器:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作)。适配器没有提供迭代器,也不能同时插入或删除多个元素。

五、queue:提供了标准的“先进先出”(FIFO)语义。在<queue>头文件中定义,形式如下:

template<typename T, typename Container = deque<T> > class queue;


第一个参数指定要在queue中存储的类型,第二个参数规定queue适配的底层容器,可供选择的容器只有dequeue和list。对大多数用途使用默认的dequeue。

1.queue接口很简单:push,pop,back,front,size,empty。

queue  q1;

q1.push( 10 );
q1.push( 20 );
q1.push( 30 );

queue ::size_type i;
i = q1.size( );
i = q1.front( );
q1.pop( );

注意的是,pop不返回弹出的元素。如果想保留一个副本,就须先用front获得队头元素。

2.如果想对实际生活中的“先来先服务”语义建模,就应当使用一个队列结构。其插入删除元素都较快(常量时间)。
六、priority_queue:也是一个队列,其元素按有序顺序排列。其不采用严格的FIFO顺序,给定时刻位于队头的元素正是有最高优先级的元素。如果两个元素有相同的优先级,那么它们在队列中的顺序就遵循FIFO语义。在<queue>头文件中定义,形式如下:
template<typename T, typename Container = vector<T>, typename Compare = less<typename Container::value_type> > class priority_queue;

默认适配的底层容器是vector,也可以使用deque,list不能用,因为priority_queue要求能对元素随机访
问以便进行排序。
1. 与queue相比,priority_queue提供的接口还少一个。push和pop允许分别插入和删除元素,top会返回
队头元素的一个const引用。同时,它也支持size和empty。
2.优先级队列用于对一些超常的队列建模。它的插入和删除一般都比简单队列的插入和删除慢,因为必须对元素
重新调整顺序,以支持按优先级排序。

七、stack:提供了标准的“后进先出”(LIFO)语义。在<stack>头文件中定义,形式如下:
template<typename T, typename Container = deque<T> > class stack;
[/code]
可以使用三个标准顺序容器中的任何一个作为stack的底层模型。
1. 其提供的接口与queue基本相同。只是stack提供的是top,而不是front,毕竟两者所表现的语义不同。
2.如果想对实际生活中的“先来后服务”语义建模,就应当使用栈。其插入删除元素都较快(常量时间)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: