C++ 使用循环遍历目录

C++ 使用循环遍历目录,c++,for-loop,recursion,directory-structure,C++,For Loop,Recursion,Directory Structure,我知道以前有人问过这个问题,但我想到了一个具体的例子。 目前我有一段代码,虽然有点伪代码,因为我不在我的工作终端: void setTree(string dir) { add dir to dirlist create dir object //contains list of subdirs and files for subdir in dir.subs do setTree(subdir) end } 这是否可能仅用于for循环,因为您无

我知道以前有人问过这个问题,但我想到了一个具体的例子。 目前我有一段代码,虽然有点伪代码,因为我不在我的工作终端:

void setTree(string dir) {
    add dir to dirlist
    create dir object //contains list of subdirs and files
    for subdir in dir.subs do
        setTree(subdir)
    end
}
这是否可能仅用于for循环,因为您无法在编译时知道编译时将有多少子目录。
伪代码是很好的解释或算法。我真的不需要任何东西,因为我最喜欢我的递归解决方案,但我真的想知道它是否可行。以及其背后的理论。

有关理论,请参见此处投票最多的答案:

实际上:

void setTree(string dir) {
   add dir to dirlist
   while (dirlist not empty) {
   d = dirlist.pop()
   create d object
   for subdir in d.subs do
      append subdir to dirlist
   end
   }
}

我试着按照pseudcode奇怪的语法组合,希望它仍然可读。

这取决于dir类的设计。如果子曲面保存在数组或列表中,则有一个大小值可以用作for循环的最大值。该值将在运行时定义。如果保存了子曲面,则可能需要使用while循环

希望能有所帮助
ChronosMOT

很抱歉我的伪代码太多,最近c和Lua太多了。所以我们创建了一个堆栈或队列之类的东西,然后弹出并将其推到上面?没问题;)是的,没错。我假设任何展开到迭代中的典型递归都需要一个集合来代替包含每个递归调用的所有参数的堆栈跟踪。Loki Astari的答案也很值得一读。在其文档中Boost.Filesystem定义的正下方,有一个关于其工作原理的简化解释。