【发布时间】:2022-01-18 15:04:59
【问题描述】:
std::filesystem::directory_iterator 是一个LegacyInputIterator,显然它不能并行使用std::for_each
我可以遍历directory_iterator,获取项目,将它们放在一个向量中,然后使用该向量进行并行迭代。
上面的步骤可以省略吗?有没有办法像这样并行遍历directory_iterator:
std::for_each(
std::execution::par_unseq, // This is ignored currently
std::filesystem::begin(dir_it),
std::filesystem::end(dir_it),
func
);
【问题讨论】:
-
std::foreach()只能在迭代器满足LegacyForwardIterator的要求时与并行执行策略一起使用。LegacyInputIterator不符合条件 - 因此不能用于多通道或并行算法。实际上,这是因为在大多数现实世界的系统上遍历目录是在一个方向上发生的(即从第一个条目迭代到最后一个条目,但不会在目录条目中来回迭代),因此可以轻松实现目录迭代器以满足 @987654330 的要求@但不是LegacyForwardIterator的要求