[C ++]如何使用std :: stack来处理文件/目录层次结构?

时间:2013-02-14 04:30:02

标签: c++ stack composite

我有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(),用于将文件或目录推送到向量中。如果目录中的文件,文件的级别高于目录的级别。所有的setter和getter都已定义。

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

1 个答案:

答案 0 :(得分:1)

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

  1. 将根目录推入堆栈。

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

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

  4. 转到第2步。