0

我有 3 个类,Root、CFile、SubDirectory。Root 是一个抽象类。CFile 和 SubDirectory 是从 Root 派生的。CFile 具有属性:name:string、size:int、level:int。SubDirectory 有属性:name:string, size:int, level:int, 一个vector,包含文件和目录,还有一个函数void add() 将文件或目录推入vector。如果一个文件在目录中,文件的级别比目录的高一级。定义了所有的 setter 和 getter。

现在,我有一个名为 DirRead.h 的文件,它可以构造当前目录(计算机文件夹)中的所有条目。每个条目都有一个文件名、大小、级别和类型(文件或目录)。在主函数中,我被要求使用来自 DirRead 的信息作为输入来构建文件系统的层次结构(使用 CFile 和 SubDirectory)。DirRead.h 进行预购遍历。这种情况下不接受递归(我试过了,DirRead.h 报错)。我被要求使用堆栈来处理输入,但我不知道如何。显然水平在这里真的很重要。我试图创建一个堆栈并将所有文件和目录推入堆栈,然后比较级别以形成层次结构。但是 Root 没有 Add 功能,没有办法将 CFile 添加到 SubDirectory 中,因为它们都是 Root*。任何人都知道如何做到这一点?谢谢。

4

1 回答 1

1

您使用堆栈来跟踪您尚未探索的目录。您可以使用以下算法:

  1. 将根目录压入堆栈。

  2. 从堆栈中弹出顶部条目。如果堆栈为空,请停止,您就完成了。

  3. 遍历您从堆栈中提取的目录。将其中的每个文件和目录添加到您的数据结构中。此外,将您找到的每个目录都推送到您的堆栈中。

  4. 转到第 2 步。

于 2013-02-14T04:45:37.730 回答