繁体   English   中英

`std::filesystem::path` 没有反向迭代器吗?

[英]No reverse iterators for `std::filesystem::path`?

std::filesystem::path不提供反向迭代器(即rbeginrend )是否存在技术原因?

如果我有一个std::filesystem::path用于/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::iterator。”

同样来自 boost.org 的一个页面,它说:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM