我在定义运算符时遇到了一个小问题:
运营商的代码是:
ostream& operator<< (ostream& outs, const IntQueue& queue)
{
NodePtr temp = queue.head;
while(temp->link != NULL)
{
outs << temp->data;
outs << " ";
}
outs << endl;
return outs;
}
我希望操作员显示队列中所有节点的temp-&gt;数据以及最后一个节点(指向NULL)。我不知道如何修改while循环,所以它也会写出最后一项(指向NULL)。
希望我能说清楚。
干杯。
答案 0 :(得分:3)
ostream& operator <<( ostream& outs, const IntQueue& queue )
{
for ( NodePtr temp = queue.head; temp; temp = temp->link )
{
outs << temp->data;
outs << " ";
}
outs << endl;
return outs;
}
答案 1 :(得分:0)
您可以尝试使用do-while循环,以便在上次完成操作之后不会检查NULL。
我想这会允许你打印出NULL作为最终值。
答案 2 :(得分:0)
尝试以下方法:
ostream& operator<< (ostream& outs, const IntQueue& queue)
{
NodePtr temp = queue.head;
while(temp != NULL)
{
outs << temp->data;
outs << " ";
temp = temp->link;
}
outs << endl;
return outs;
}
答案 3 :(得分:0)
要纠正的一些事情:
正如评论中所指出的那样,在while循环内部确保用
之类的东西推进指针temp = temp-&gt; link;
将循环编辑为do-while循环。通过这种方式,您可以确保它甚至可以打印出最后一个节点。
最后,作为补充,您可以考虑重载“&lt;&lt;” Node对象本身的运算符。这样,打印整个队列的代码只是用于遍历队列,如下所示:
ostream& operator<< (ostream& outs, const IntQueue& queue)
{
Node* temp = queue.head;
if(NULL != temp) {
do
{
outs << temp;
temp = temp->link;
}
while(temp->link != NULL);
}
return outs;
}