0

为什么std::filesystem::path不提供反向迭代器(即rbeginrend)有技术原因吗?

如果我有一个std::filesystem::pathfor/a/b/c/b/d/b/e并且我想找到第一个匹配的组件b,我可以使用std::find(p.begin(), p.end(), fs::path("b")).

但是如果我想找到匹配的最后一个组件b,我不能只切换到反向迭代器。我可以编写自己的循环,但看起来这将是一个“几乎免费”实现的常见操作。

接口的设计是否会导致难以提供反向迭代器?

4

1 回答 1

1

根据 cppreference.com 的这个页面:

“std::reverse_iterator 不适用于其解引用返回对 *this 成员的引用的迭代器(所谓的“存储迭代器”)。存储迭代器的一个示例是 std::filesystem::path::iterator。”

同样来自 boost.org 的一个页面,上面写着:

路径迭代器在内部存储它们的值对象,并在取消引用时返回对这些内部对象的引用。它们不能与迭代器适配器一起使用,例如 std::reverse_iterator 假定通过取消引用迭代器获得的引用指向比迭代器本身寿命更长的对象。

要查找有关存储迭代器的更详细说明,请访问此页面

于 2021-07-30T02:58:45.253 回答