reverse_iterator是否继承自迭代器?

ton*_*ony 1 c++ iterator stl

让它成为std::list::iteratorstd::list::reverse_iterator.反向派来自前锋吗?如果没有那么为什么没有相反的成员函数list

提前致谢.

K-b*_*llo 5

让它成为std :: list :: iterator和std :: list :: reverse_iterator.反向派来自前锋吗?

不一定,它们可能(并且可能在大多数实现中)不同类型.迭代器一直被复制,这种继承会导致切片.此外,所有操作iterator应该是virtual为了避免不一致,这将是低效的.考虑到这一点,标准甚至禁止继承作为一种可能的实现(也许是间接的)也是有意义的.

更新:标准提供了std::reverse_iterator类模板的定义,并且强制要求std::list::reverse_iterator是此类模板的特化.继承不是可能的实现.

如果没有那么为什么列表的成员函数没有相反的等价物呢?

因为你可以调用base()a reverse_iterator来获取底层的常规iterator.a reverse_iterator与其对应的基本关系iterator i&*(reverse_iterator(i)) == &*(i - 1).