我正在尝试将队列的内容打印为数组。我有代码工作和编译。问题是当我多次调用函数时,打印函数没有调用,并且不再打印数组。我需要多次打印数组而不打印。
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
并打印队列的内容。所以我很困惑,为什么它会打印第二个队列两次,而不是第一个队列。
有什么想法吗?
答案 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()
。你应该只是创建一个临时的......不管它是什么,并确保queueFront
是const
,因为队列的前面不应该改变(如果它是&#39; s&#39}是什么&# 39; s指的是。)