有技术原因吗 std::filesystem::path 不提供反向迭代器(即。, rbegin 和 rend )?
std::filesystem::path
rbegin
rend
如果我有 std::文件系统::路径 对于 /a/b/c/b/d/b/e 我想找到第一个匹配的组件 b ,我可以使用 std::find(p.begin(), p.end(), fs::path("b")) .
std::文件系统::路径
/a/b/c/b/d/b/e
b
std::find(p.begin(), p.end(), fs::path("b"))
但如果我想找到 最后的 匹配的组件 b ,我不能直接切换到反向迭代器。我可以编写自己的循环,但这似乎是一个“几乎免费”实现的常见操作。
接口的设计是否会使提供反向迭代器变得困难?
根据cppreference.com的此页面:
std::reverse_iterator不适用于其解引用返回对*this成员的引用的迭代器(所谓的“隐藏迭代器”)。隐藏迭代机的一个例子是std:filesystem::path::迭代器
同样来自boost.org的一个页面,上面写道:
路径迭代器在内部存储其值对象,当取消引用时返回对这些内部对象的引用。它们不能与迭代器适配器(如std::reverse_iterator)一起使用,这些适配器假定通过取消引用迭代器获得的引用指向迭代器本身之外的对象。
要查找有关隐藏迭代器的更详细解释,请访问 this page .