运算符<<在队列中

时间:2014-02-10 16:12:39

标签: c++ linked-list operator-overloading

我在定义运算符时遇到了一个小问题:

运营商的代码是:

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)。

希望我能说清楚。

干杯。

4 个答案:

答案 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循环。通过这种方式,您可以确保它甚至可以打印出最后一个节点。

  • 使用do-while循环后,您需要在temp上添加一个额外的NULL检查来处理'空'列表大小写。

最后,作为补充,您可以考虑重载“&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;
}