让它为std::list::iterator
和std::list::reverse_iterator
。反向派来自前锋吗?如果没有,那么为什么list
提前致谢。
答案 0 :(得分:5)
让它成为std :: list :: iterator和std :: list :: reverse_iterator。反向来自前锋吗?
不一定,他们可能(并且可能在大多数实现中)不同类型。迭代器一直被复制,这种继承会导致切片。此外,iterator
上的所有操作都应为virtual
,以避免不一致,这样效率会很低。考虑到它,标准甚至禁止继承作为一种可能的实现(也许是间接的)。
更新:该标准提供了std::reverse_iterator
类模板的定义,并强制要求std::list::reverse_iterator
是此类模板的专门化。继承不是可能的实现。
如果没有,那么为什么列表的成员函数没有相反的等价物呢?
因为您可以在base()
上致电reverse_iterator
以获取基础常规iterator
。 reverse_iterator
及其对应的iterator
i
之间的基本关系是&*(reverse_iterator(i)) == &*(i - 1).
答案 1 :(得分:1)
在GNU的C ++标准库实现中,reverse_iterator和迭代器之间存在一种关系。 (我从未查看过MSVC ++或llvm实现,但我认为它们是相同的。)
基本上,reverse_iterator接受一个迭代器并且有一个瘦包装器,因此++别名为 - 和 - 别名为++。基本上所有操作都是基础非反向迭代器的包装器。
如果没有,那么为什么列表的成员函数没有相反的等价物呢?
std::list
确实有reverse iterator。