c++ - 为什么 std::reverse_iterator 比直接 iterator 慢?

我注意到 std::reverse_iterator 在取消引用之前总是减少内部 iterator 的副本:

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

这是 GNU 标准 C++ 库中的实现。 https://en.cppreference.com/w/cpp/iterator/reverse_iterator/operator* 以同样的方式实现它。

问题:在反向 iterator 构造函数中将其递减一次而不是在每个取消引用步骤中递减它不是更有效吗?

回答1

问题:在反向 iterator 构造函数中仅将其递减一次而不是在每个取消引用步骤中递减它不是更有效吗?

当无法以这种方式实现反向 iterator 时,效率无关紧要。考虑一个表示 rend 的反向 iterator。为了达到它,您必须减少内部 iterator 以便它指向第一个元素之前。这是不可能的,因此必须将递减延迟到不可能的间接位置,因为 end iterators 不可取消引用。

相似文章

随机推荐

最新文章