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