1

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

打印功能的代码是:

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,然后为 构建一个数组q2,该debugQueue函数会打印该队列。然后我调用重载赋值运算符并 do q2=q1,然后debugQueue再次调用它并打印队列的内容。所以我很困惑为什么它会打印第二个队列两次,而不是第一个队列。有什么想法吗?

4

2 回答 2

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了 type 因为我不知道queueFront. 我认为是list<int>::iterator但不确定。您可以auto用正确的类型替换或保持原样,让编译器推断类型current

于 2012-10-19T20:08:14.817 回答
1

我认为这只是queueFront当你打电话时你正在永久改变debugArray()。您可能应该只创建一个临时的... 不管它是什么,并确保queueFrontconst,因为队列的前面不应该改变(如果这就是它所指的)。

于 2012-10-19T20:12:04.130 回答