【问题标题】:[C++]How to use std::stack to deal with the file/directory hierarchy?[C++]如何使用std::stack来处理文件/目录层次结构?
【发布时间】:2013-01-29 20:11:35
【问题描述】:

我有 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*。任何人都知道如何做到这一点?谢谢。

【问题讨论】:

    标签: c++ stack composite


    【解决方案1】:

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

    1. 将根目录推入堆栈。

    2. 从堆栈中弹出顶部条目。如果堆栈是空的,停止,你就完成了。

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

    4. 转到第 2 步。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 2017-04-05
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多