我已经读过除输出迭代器之外的所有其他类别的迭代器至少支持==和!=运算符。
为什么输出迭代器不支持这个?
不禁止对i1
和i2
进行比较。 std::vector::iterator
是OutputIterator
,你可以比较它们。你不能做的是假设可以比较所有的OutputIterator
s。
所有的概念都说,一个类型不需要支持比较它是一个OutputIterator
,因为要求它意味着一些真正值得成为OutputIterator
s的东西不是。一个例子是@NathanOliver's tape iterator。另一个例子是std::ostream_iterator
我们已经遇到迭代器类别之一具有过于繁琐的要求的情况:ForwardIterator
要求解除引用返回引用类型。这意味着任何代理迭代器都限于InputIterator
,即使它支持--
,+=
,-=
等。
如果您发现自己编写了多个想要写入的函数,直到它们“填充”了一个输出,您可以考虑定义一个类别ComparableOutputIterator
(或某些名称),并且需要==
以及OutputIterator
作为该类别的成员资格。