c++ - reverse_iterator 是否继承自迭代器?

标签 c++ stl iterator

让它成为 std::list::iteratorstd::list::reverse_iterator。反向是从正向派生的吗?如果不是,那么为什么 list 的成员函数没有反向等价物?

提前致谢。

最佳答案

Let it be std::list::iterator and std::list::reverse_iterator. Is reverse one derived from forward?

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

更新:该标准为 std::reverse_iterator 类模板提供了定义,并强制要求 std::list::reverse_iterator 是这种模板的特化。继承不是一种可能的实现方式。

And if not then why there're not reverse equivalents for member functions of list?

因为您可以在 reverse_iterator 上调用 base() 以获得底层的常规 iteratorreverse_iterator 与其对应的 iterator i 之间的基本关系是 &*(reverse_iterator(i)) == &*(我 - 1).

关于c++ - reverse_iterator 是否继承自迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777759/

相关文章:

c++ - 是否可以显式调用名称损坏函数?

c++ - 如何在 C++ 中将字节数组发送到另一个进程

c++ - map.erase(map.end())?

java - 如何迭代 SortedSet 以修改其中的项目

java - 如何在没有克隆开销的情况下获得集合/映射的固定状态迭代器

c++ - 如何测试列表或 forward_list 的迭代器(包括尾部迭代器和开始前迭代器)保持有效,

C++ 与 .NET 正则表达式性能

c++ - 使用 union 作为 std::unordered_map 的键

c++ - 使用 std::string::size_type 而不是 size_t 有什么好处吗?

c++ - 实现C++ 20 bidirectional_iterator概念