std::recursive_directory_iterator 的顺序是否指定?

问题描述 投票:0回答:2

我需要以深度优先(DFS)方式遍历目录树。它看起来就像

std::recursive_directory_itereator
遵循我的机器上的订购,但我在标准或其他任何地方都找不到任何保证。入境参观的顺序是否有保证?或者甚至是“稳定”(如果在不对检查的目录树进行任何更改的情况下,我们执行相同的代码两次,则保证相同)?

如果已指定/未指定,但过去发生了变化,那么了解这些变化会很高兴。

c++ c++17 c++20 std-filesystem
2个回答
5
投票

不以任何方式保证参观顺序。

来自

std::filesystem::recursive_directory_iterator

迭代顺序是未指定,只是每个目录项仅被访问一次。

(重点是我的)

我假设在特定系统上顺序将是稳定的(只是有根据的猜测),但即使如此也不能保证。


0
投票

保证是深度优先遍历。

第一个提示是

.disable_recursion_pending()
的存在。对于非 DFS 方法来说很难实现(你必须为当前目录存储一个 bool 数组?)。

然后是

[fs.rec.dir.itr.members]/21
,它解释了一种本质上是 DFS 的算法。

© www.soinside.com 2019 - 2024. All rights reserved.