递归打印类中的链表c ++

Posted

技术标签:

【中文标题】递归打印类中的链表c ++【英文标题】:Print a linked list that is inside a class recursively c++ 【发布时间】:2014-04-18 20:38:39 【问题描述】:

我正在寻找一种最简单的方法来打印类内的私有链表。 (倒序)

我的方法是调用插入Head作为参数的类的一个函数,return是另一个执行任务的函数。

我这样做是因为以前我必须通过 Getter 函数获取 Head,然后将其插入函数调用。所有这些都在课堂之外。

void Arreglo::InfoDealer(ofstream &salida)

    return InfoDealer_f(Head, salida);


void Arreglo::InfoDealer_f(NodePTR Ptr, ofstream &salida)

    if (Ptr == NULL)
        return;
    InfoDealer_f(Ptr->Next, salida);
    //output stuff

这是正确的吗?有一个更好的方法吗?谢谢你。 我是CS新手,请耐心等待。

【问题讨论】:

【参考方案1】:

我不太了解您的示例,但是是的,您通常有一个公共方法(接口)和一个私有辅助方法:

class my_class

    public:
       void print( ostream& out );

    private:
       NodePtr _head;
       void print_helper( NodePtr node, ostream& out );



void my_class::print( ostream& out ) print_helper( _head, out ); 

【讨论】:

谢谢!我还从您的回复中学到了另一件事。我有公共的辅助功能,它应该是私有的,它更安全。 :) 实际上,public 方法应该是流插入器种类的免费友元函数。 @Deduplicator true,应该有一个流插入操作符,但可能只是return p.print( o );,并且有一个公共成员函数。【参考方案2】:

嗯,您的想法通常是正确的,您的示例最终应该会奏效。 不过,有几点需要考虑:

使用流插入器类型的公共朋友功能以获得更好的惯用用法:

inline ostream& operator<<(ostream& o, const myclass& m) 
    m.print_helper(m._head, o);
    return o;

// Add in class:
    friend ostream& operator<<(ostream& o, const myclass& m);
不要将指针隐藏在 typedef 后面,它只会使事情变得模糊。 NodePTR 应该是 Node*

【讨论】:

也许NodePTRshared_ptr&lt;Node&gt;,在这种情况下,只需键入定义它就更容易了。 @clcto:这将是容器中的过度抽象并且具有不合理的开销。

以上是关于递归打印类中的链表c ++的主要内容,如果未能解决你的问题,请参考以下文章

从文件读取到C中的链表

C语言问题:建立一个有三个结点的链表,然后输出每个结点的数据。

类中的链表,应通过类中的函数调用

打印 C 中的递归数

泛型集合类中的链表类随机产生100个有序整数(单词)的链表

泛型集合类中的链表类随机产生100个有序整数(单词)的链表