为什么 std::reverse_iterator 比直接迭代器慢?

Why is std::reverse_iterator slower than a direct iterator?

我注意到 std::reverse_iterator 总是在取消引用之前递减内部迭代器的副本:

_GLIBCXX17_CONSTEXPR reference
operator*() const
{
    _Iterator __tmp = current;
    return *--__tmp;
}

这是GNU标准C++库中的实现。 cppreference.com 以同样的方式实现它。

问题:在反向迭代器构造函数中只递减一次而不是在每个取消引用步骤递减它是否更有效?

The question: wouldn't it be more efficient to decrement it just one time in reverse iterator constructor instead of decrementing it at every dereference step?

当不可能以这种方式实现反向迭代器时,效率就无关紧要了。考虑一个表示 rend 的反向迭代器。为了到达它,您必须递减内部迭代器,使其指向第一个元素之前。这是不可能的,所以递减必须延迟到间接,因为结束迭代器不可取消引用,所以不可能是好的。