[英]Inherit all functions from user-defined iterator in reverse_iterator
[英]Does reverse_iterator inherit from iterator?
使其为std::list::iterator
和std::list::reverse_iterator
。 反向是从正向派生的吗? 如果不是,那么为什么list
成员函数没有反向等效项?
提前致谢。
使其为std :: list :: iterator和std :: list :: reverse_iterator。 反向是从正向派生的吗?
不一定(它们可能在大多数实现中)是不同类型。 迭代器一直都在复制,这种继承会导致切片。 另外, iterator
上的所有操作都应该是virtual
以避免不一致,这会导致效率低下。 考虑一下,标准甚至禁止继承作为一种可能的实现是有意义的(也许间接地做到了)。
更新:该标准为std::reverse_iterator
类模板提供了定义,并强制要求std::list::reverse_iterator
是此类模板的专门化版本。 继承是不可能的实现。
如果不是这样,为什么列表成员函数没有反向等效项?
因为您可以在reverse_iterator
上调用base()
来获取基础的常规iterator
。 reverse_iterator
及其对应的iterator
i
之间的基本关系是&*(reverse_iterator(i)) == &*(i - 1).
在GNU C ++标准库的实现中,reverse_iterator和迭代器之间存在has-a关系。 (我从未看过MSVC ++或llvm的实现,但我可以想象它们是相同的。)
基本上,reverse_iterator接受一个迭代器,并具有一个薄包装器,以便++别名-和-别名++。 基本上,所有操作都是底层非反向迭代器的包装。
如果不是这样,为什么列表成员函数没有反向等效项?
std::list
确实具有反向迭代器 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.