如何在 C++ 中使用 `fs::filesystem` 时进行层次遍历
how to level-traverse while using `fs::filesystem` in c++
通过使用fs::filesystem我可以像下面的代码一样预购遍历
for (const auto& file : fs::recursive_directory_iterator(paths))
cout << file.path() << endl;
而且,我发现recursive_directory_iterator
只支持预购。
那么如何在 C++ 中使用“级别顺序遍历”?
我想我必须使用 <vector>
。有什么提示吗?
显而易见的答案是不使用 recursive_directory_iterator。
而是使用带有队列的 non-recursive 迭代器。首先将要迭代的目录的根推入队列。
然后进入循环:
- 从队列中弹出一个目录名
- 处理该目录
- 当你遇到一个目录(那是不是一个符号link),将它推入队列
- 重复直到队列为空
在循环中,您可以在该循环之后将路径推入 std::vector
,然后按路径中的 '/'
个字符数对该向量进行排序。
通过使用fs::filesystem我可以像下面的代码一样预购遍历
for (const auto& file : fs::recursive_directory_iterator(paths))
cout << file.path() << endl;
而且,我发现recursive_directory_iterator
只支持预购。
那么如何在 C++ 中使用“级别顺序遍历”?
我想我必须使用 <vector>
。有什么提示吗?
显而易见的答案是不使用 recursive_directory_iterator。
而是使用带有队列的 non-recursive 迭代器。首先将要迭代的目录的根推入队列。
然后进入循环:
- 从队列中弹出一个目录名
- 处理该目录
- 当你遇到一个目录(那是不是一个符号link),将它推入队列
- 重复直到队列为空
在循环中,您可以在该循环之后将路径推入 std::vector
,然后按路径中的 '/'
个字符数对该向量进行排序。