关于 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 isstd::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/