递归打印类中的链表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*
。
【讨论】:
也许NodePTR
是shared_ptr<Node>
,在这种情况下,只需键入定义它就更容易了。
@clcto:这将是容器中的过度抽象并且具有不合理的开销。以上是关于递归打印类中的链表c ++的主要内容,如果未能解决你的问题,请参考以下文章