我已经读到,除了输出迭代器,其他所有迭代器类别至少支持==和!=运算符。
为什么输出迭代器不支持此功能?
答案 0 :(得分:5)
禁止i1
和i2
的比较。 std::vector::iterator
是 OutputIterator
,您可以对其进行比较。您无法做的是假设可以比较所有 OutputIterator
。
所有概念的意思是,不需要类型来支持将其比较为OutputIterator
,因为要求它意味着某些确实值得的事情不是OutputIterator
。一个示例为@NathanOliver's tape iterator。另一个示例是std::ostream_iterator
我们已经遇到一种情况,其中Iterator类别之一的要求过于繁重:ForwardIterator
要求取消引用返回引用类型。这意味着即使代理迭代器支持InputIterator
,--
,+=
等,也仅限于-=
。
如果您发现自己编写了多个要在“输出”输出之前编写的函数,则可以考虑定义类别ComparableOutputIterator
(或类似的名称),并要求==
以及OutputIterator
获取该类别的成员身份。