让它成为 std::list::iterator
和 std::list::reverse_iterator
。反向是从正向派生的吗?如果不是,那么为什么 list
的成员函数没有反向等价物?
提前致谢。
最佳答案
Let it be std::list::iterator and std::list::reverse_iterator. Is reverse one derived from forward?
不一定,它们可能(并且可能在大多数实现中)是不同的类型。迭代器一直被复制,这种继承会导致切片。此外,iterator
上的所有操作都应该是virtual
以避免不一致,否则效率低下。考虑一下,标准甚至禁止继承作为一种可能的实现是有意义的(也许它是间接的)。
更新:该标准为 std::reverse_iterator
类模板提供了定义,并强制要求 std::list::reverse_iterator
是这种模板的特化。继承不是一种可能的实现方式。
And if not then why there're not reverse equivalents for member functions of list?
因为您可以在 reverse_iterator
上调用 base()
以获得底层的常规 iterator
。 reverse_iterator
与其对应的 iterator
i
之间的基本关系是 &*(reverse_iterator(i)) == &*(我 - 1).
关于c++ - reverse_iterator 是否继承自迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777759/