c++ - `reverse_iterator`的限制原因

标签 c++ stl iterator

关于 the cppreference page of reverse_iterator我发现以下评论

std::reverse_iterator does not work with iterators that return a reference to a member object (so-called "stashing iterators"). An example of stashing iterator is std::filesystem::path::iterator.

这种说法正确吗?而且,如果是,那是为什么?

对我来说,限制是没有意义的,因为我假设反向迭代器基本上交换了 operator++operator -- (并存储底层迭代器一个)。

编辑:显然这个问题可能会被误解: 我知道我们需要一次递减操作来实现反向迭代器。问题是为什么在构造 reverse_iterator 时没有实现。这样就避免了隐藏迭代器的问题。但显然这不是它的完成方式,每次取消引用迭代器时都会进行递减。为什么?

最佳答案

and stores the underlying iterator off by one

这就是原因。您必须在取消引用时召唤一个非逐一迭代器,如果破坏召唤的迭代器会使从中获得的引用无效(就像隐藏迭代器的情况一样),那么鼻恶魔。

关于c++ - `reverse_iterator`的限制原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50847021/

相关文章:

c++ - push_back vs emplace_back

java - 当前修改异常 Android 迭代器

c++ - 这个合并排序代码有什么问题?

Java实现Iterable,对于每个和方法

c++ - CMAKE_COMPILER_IS_GNUCXX 和 CMAKE_CXX_COMPILER_ID 为空

c++ - 潜在狄利克雷分配 (LDA) 实现

c++ - 返回 C++ const 项,取决于是否存在,安全

c++ - std::auto_ptr 或 boost::shared_ptr 用于 pImpl 成语?

c++ - gcc-4.0.0-8 和 gcc-4.3.2 的区别

c++ - 为什么存款的第一个输出以科学计数法显示?