尝试将队列打印为数组

时间:2012-10-19 20:04:47

标签: c++ data-structures queue

我正在尝试将队列的内容打印为数组。我有代码工作和编译。问题是当我多次调用函数时,打印函数没有调用,并且不再打印数组。我需要多次打印数组而不打印。

Print功能的代码是:

template <class Type>
 void queueType<Type>::debugArray() 
 {
   for(queueFront; queueFront<count; queueFront++){
    cout << "[" << queueFront<< "] ," << list[queueFront] << " ";
   }

 } //end debugQueue

main.cpp代码是:

#include <iostream>
#include "queueAsArray.h"

using namespace std;

int main()
{
    queueType<int> q1;
    queueType<int> q2;
    queueType<int> q3;
    int x = 5;

    for(int i= 0; i<10; i++) {
        q1.addQueue(i);
    }

    cout << "q1 after being filled up with 10 items" << endl;

    q1.printQueueInfo();

    cout << "Queue contents from front to rear\n\n" << endl;

    q1.debugArray();
    q1.deleteQueue();
    q1.deleteQueue();
    q1.deleteQueue();

    for(int i= 0; i<=20; i){
        i+=5;
        q1.addQueue(i);
    }

    q1.debugArray();
    return 0;
}

是否有理由不再打印函数调用?如果您需要整个类和实现文件,我可以提供它。奇怪的是,如果我创建类q2的第二个instatiation,然后为q2构建一个数组,debugQueue函数将打印该队列。然后我调用重载的赋值运算符并执行q2=q1,然后再次调用debugQueue并打印队列的内容。所以我很困惑,为什么它会打印第二个队列两次,而不是第一个队列。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

看起来你的问题是你正在改变queueType实例作为打印的一部分。

template <class Type>
void queueType<Type>::debugArray() 
{
  for(queueFront; queueFront<count; queueFront++){
    cout<<"[" << queueFront<<"] ,"<< list[queueFront]<<" ";}
} 

在这里,您将获取成员queueFront并向前突变,直到您到达队列末尾。这会改变字段queueFront而不是指向同一位置的本地字段。尝试使用本地,它将解决您的问题

for(auto current = queueFront; current < count; current++){
  cout<<"[" << current<<"] ,"<< list[current]<<" ";}
} 

注意:我使用auto作为类型,因为我不知道queueFront的类型。我认为它是list<int>::iterator但不确定。您可以使用正确的类型替换auto或保留原样并让编译器推断出current的类型

答案 1 :(得分:1)

我认为,只要您在致电queueFront时永久更改debugArray()。你应该只是创建一个临时的......不管它是什么,并确保queueFrontconst,因为队列的前面不应该改变(如果它是&#39; s&#39}是什么&# 39; s指的是。)