微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决`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 匹配的 last 组件,我不能只切换到反向迭代器。我可以编写自己的循环,但这似乎是一个“几乎可以免费”实现的常见操作。

界面设计中是否存在难以提供反向迭代器的问题?

解决方法

根据 cppreference.com 的这个页面:

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。