让它成为std::list::iterator
和std::list::reverse_iterator
。反向是从正向派生的吗?如果不是,那么为什么没有成员函数的反向等价物list
?
提前致谢。
让它成为 std::list::iterator 和 std::list::reverse_iterator。反向是从正向派生的吗?
不一定,它们可能(并且在大多数实现中可能是)不同的类型。迭代器一直被复制,这种继承会导致切片。另外,所有操作iterator
都应该virtual
避免不一致,这将是低效的。考虑到这一点,标准甚至禁止继承作为一种可能的实现是有意义的(也许它是间接的)。
更新:该标准提供了std::reverse_iterator
类模板的定义,并规定std::list::reverse_iterator
了此类模板的专门化。继承是不可能的实现。
如果不是,那么为什么列表的成员函数没有反向等价物?
因为你可以调用base()
areverse_iterator
来获取底层的正则iterator
。reverse_iterator
a与其对应的基本关系iterator
i
是&*(reverse_iterator(i)) == &*(i - 1).
在 GNU 的 C++ 标准库的实现中,reverse_iterator 和迭代器之间存在一种 has-a 关系。(我从未看过 MSVC++ 或 llvm 实现,但我想它们是相同的。)
基本上,reverse_iterator 接受一个迭代器并具有一个薄包装器,以便 ++ 别名为 -- 和 -- 别名为 ++。基本上所有操作都是底层非反向迭代器的包装器。
如果不是,那么为什么列表的成员函数没有反向等价物?
std::list
确实有一个反向迭代器。