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

Posted

技术标签:

【中文标题】C++:为啥输出迭代器不支持比较操作?【英文标题】:C++: why output iterators do not support comparison operations?C++:为什么输出迭代器不支持比较操作? 【发布时间】:2019-02-19 15:44:44 【问题描述】:

我了解到,除了输出迭代器之外,所有其他类别的迭代器都至少支持 == 和 != 运算符。

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

【问题讨论】:

为什么要比较输出迭代器? 您需要比较的“输出结束”是什么。输出迭代器只是写出数据。 @SergeyA,我只是在查看每个迭代器类型的功能,如果我不能,那么我不会(这里就是这种情况)。但是,如果我知道为什么不允许这样做,那么我会尽量避免这种情况。 @NathanOliver,你的意思是一旦我增加输出迭代器我就不能访问前一个元素? @pasha,是的,如果输出迭代器,这是整个属性 【参考方案1】:

i1i2 的比较不被禁止std::vector::iterator OutputIterator,你可以比较一下。你不能做的是假设所有 OutputIterators 可以比较。

所有的概念是说它不需要一个类型支持比较,因为它是一个OutputIterator,因为要求它意味着一些真正值得拥有的东西OutputIterators 不是。一个例子是@NathanOliver's tape iterator。另一个例子是std::ostream_iterator

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

如果您发现自己编写了多个想要编写的函数,直到它们“填充”输出,您可能会考虑定义一个类别ComparableOutputIterator(或类似名称),并要求==OutputIterator 用于该类别的成员。

【讨论】:

有道理,为什么这个逻辑不适用于输入迭代器? @pasha 因为根据您从哪里阅读来决定何时停止更为常见。查看所有具有输入迭代器对但输出只有一个迭代器的算法。 再一次说得通了,对于接受输出迭代器的算法,假设输出的任何地方(容器或类似的)都有足够的存储空间。因此,它不需要提供第二个。 @Caleth 谢谢你

以上是关于C++:为啥输出迭代器不支持比较操作?的主要内容,如果未能解决你的问题,请参考以下文章

向量迭代器不兼容...但是为啥呢?

为什么迭代器只能被一个集合使用呢 为什么迭代器不能在迭代过程中 ?增删呢 是因为 每次迭代时候 把之前的元素给拿出去了 如果你在操作过程中将下一个迭代元素给拿走了(迭代器不具备自动判断长度功能 她依旧

我用VC++写的存图像的程序,为啥保存了的BMP图像打不开,说是照片查看器不支持此个格式,

C++ for-each 语句触发“向量迭代器不兼容”断言失败:this->_Getcont() == 0

为啥 collections.sort 在 Java 中按比较器排序时会抛出不支持的操作异常?

为啥 C++ 不支持命名参数