利用STL模板库,我在程序里定义了一个队列,里面装着整型值:
#include <list>
#include <queue>
using namespace std;
typedef list<int, allocator<int> > INTLIST;
typedef queue<int,INTLIST >  INTQUEUE;
INTQUEUE CURRENTQUEUE;请问 ,如何遍历这个队列,如果如下遍历:
int value;
while(!CURRENTQUEUE.empty()){
  value=CURRENTQUEUE.front();
  CURRENTQUEUE.pop();
}
这样 ,这个队列就发生了变化,因为每读一个就把队首去掉了
我希望遍历后不要改变队列,请问该如何做?

解决方案 »

  1.   

    不能直接就STL定义的模板来解决这个问题吗?
      

  2.   

    stl的容器都可以用iterator来枚举。
      

  3.   

    queue就是一个操作受限的容器,无法提供遍历的迭代器自己做一个队列吧,呵呵
      

  4.   


    因为我想计算队列的滑动平均值,所以,每次push,pop后要重新计算一次队列的平均值。
      

  5.   

    我相信这个模板里也会有访问而且不改变队列的函数把。或者最傻的办法,你把所有的值pop出来后,放到一个数组里,你在
    push回去。
    不过我想,这样简单的结构,如果没有接口可用。自己去写一个就OK了。
    或者可以获得这个队列的队首指针不,有的话,直接用它去操作。具体的细节自己想想。
    我不懂这里的stl都有啥功能。
    基本的东西,参见大学课本,严蔚敏的数据结构。
      

  6.   

    使用deque容器能满足你的需求吗,它是标准容器,可以配合stl的iterator,algorithm等
      

  7.   


    dequeue是双端队列吗?跟queue相比,有什么不同和优点 ?
      

  8.   

    哪有这样子来计算平均值的?这样子你还用队列做什么?不如直接使用一个CList来管理。个人建议是在入队/出队操作的时候计算,而不是进行遍历。