我已经创建了一个队列类,我有一个队列,我想要反转它,但是当我实现该函数时,它不会显示任何内容。 这是它
void reverse(Queue <T> &queue) {
if(!queue.empty())
{
int temp=queue.queue_front;
queue.pop(queue.queue_front);
reverse(queue);
queue.push(temp);
}
}
我正在使用的pop函数需要一个值,这就是为什么有queue.queue_front。我试图用递归来做它。这是我的打印函数
void display() {
for(int current = queue_front+1; current < queue_length; current++)
{
cout << "[" << current << "]=" << queue_array [current] << " ";
}
}
现在这就是我在主要功能中所做的事情
Queue <int>queue1(10);
queue1.push(16);
queue1.push(14);
queue1.push(6);
queue1.push(60);
queue1.reverse(queue1);
queue1.display();
这是pop功能
void pop(T& item) {
if (empty()) {
cout << "The Queue is empty!";
exit(1);
}
else {
queue_front = (queue_front + 1) % queue_size;
item = queue_array[queue_front];
queue_length--;
}
}
它没有显示任何内容。谢谢。
答案 0 :(得分:0)
您正在使用整数队列进行测试,这会隐藏一些错误
您应该使用Queue<std::string>
进行测试。
首先,在这里:
int temp=queue.queue_front;
您要保存索引,而不是元素 你打算做什么
T temp = queue.queue_array[queue.queue_front];
但是没有理由混淆成员变量(见下文)。
下面,
queue.pop(queue.queue_front);
您将对队列成员的引用传递给pop
pop
的参数是顶部元素弹出后存储的位置。
换句话说,在该行之后,queue.queue_front
将是位于队列前面的元素,而不是队列新前面的索引。
这可能有用:
void reverse(Queue <T> &queue) {
if(!queue.empty())
{
T temp;
queue.pop(temp);
reverse(queue);
queue.push(temp);
}
}