C++:为什么输出迭代器不支持比较操作?

pas*_*sha -1 c++ iterator stl

我已经读过除输出迭代器之外的所有其他类别的迭代器至少支持==和!=运算符.

为什么输出迭代器不支持这个?

Cal*_*eth 5

比较i1i2 不禁止.std::vector::iterator OutputIterator,你可以比较它们.你不能做的是假设所有的 OutputIterator s都可以比较.

所有的概念都说,一个类型不需要支持比较它是一个OutputIterator,因为要求它会意味着一些真正值得做的事情OutputIterator不是.一个例子是@ NathanOliver的磁带迭代器.另一个例子是std::ostream_iterator

我们已经遇到其中一个Iterator类别具有过于繁琐的要求的情况:ForwardIterator要求解除引用返回引用类型.这意味着任何代理迭代器被限制为InputIterator,即使它支持--,+=,-=等.

如果你发现自己写的希望写,直到他们"填补"多重功能的输出,你可以考虑定义一个类ComparableOutputIterator(或诸如此类的名称),并要求==以及OutputIterator该类别的成员.