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

时间:2019-02-19 15:44:45

标签: c++ stl iterator

我已经读到,除了输出迭代器,其他所有迭代器类别至少支持==和!=运算符。

为什么输出迭代器不支持此功能?

1 个答案:

答案 0 :(得分:5)

禁止i1i2的比较。 std::vector::iterator OutputIterator,您可以对其进行比较。您无法做的是假设可以比较所有 OutputIterator

所有概念的意思是,不需要类型来支持将其比较为OutputIterator,因为要求它意味着某些确实值得的事情不是OutputIterator。一个示例为@NathanOliver's tape iterator。另一个示例是std::ostream_iterator

我们已经遇到一种情况,其中Iterator类别之一的要求过于繁重:ForwardIterator要求取消引用返回引用类型。这意味着即使代理迭代器支持InputIterator--+=等,也仅限于-=

如果您发现自己编写了多个要在“输出”输出之前编写的函数,则可以考虑定义类别ComparableOutputIterator(或类似的名称),并要求==以及OutputIterator获取该类别的成员身份。