繁体   English   中英

reverse_iterator是否从迭代器继承?

[英]Does reverse_iterator inherit from iterator?

使其为std::list::iteratorstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM