C++:为啥输出迭代器不支持比较操作?
Posted
技术标签:
【中文标题】C++:为啥输出迭代器不支持比较操作?【英文标题】:C++: why output iterators do not support comparison operations?C++:为什么输出迭代器不支持比较操作? 【发布时间】:2019-02-19 15:44:44 【问题描述】:我了解到,除了输出迭代器之外,所有其他类别的迭代器都至少支持 == 和 != 运算符。
为什么输出迭代器不支持这个?
【问题讨论】:
为什么要比较输出迭代器? 您需要比较的“输出结束”是什么。输出迭代器只是写出数据。 @SergeyA,我只是在查看每个迭代器类型的功能,如果我不能,那么我不会(这里就是这种情况)。但是,如果我知道为什么不允许这样做,那么我会尽量避免这种情况。 @NathanOliver,你的意思是一旦我增加输出迭代器我就不能访问前一个元素? @pasha,是的,如果输出迭代器,这是整个属性 【参考方案1】:i1
和i2
的比较不被禁止。 std::vector::iterator
是 OutputIterator
,你可以比较一下。你不能做的是假设所有 OutputIterator
s 可以比较。
所有的概念是说它不需要一个类型支持比较,因为它是一个OutputIterator
,因为要求它意味着一些真正值得拥有的东西OutputIterator
s 不是。一个例子是@NathanOliver's tape iterator。另一个例子是std::ostream_iterator
我们已经遇到过其中一个迭代器类别的要求过于繁重的情况:ForwardIterator
要求取消引用返回引用类型。这意味着任何代理迭代器都仅限于InputIterator
,即使它支持--
、+=
、-=
等。
如果您发现自己编写了多个想要编写的函数,直到它们“填充”输出,您可能会考虑定义一个类别ComparableOutputIterator
(或类似名称),并要求==
和OutputIterator
用于该类别的成员。
【讨论】:
有道理,为什么这个逻辑不适用于输入迭代器? @pasha 因为根据您从哪里阅读来决定何时停止更为常见。查看所有具有输入迭代器对但输出只有一个迭代器的算法。 再一次说得通了,对于接受输出迭代器的算法,假设输出的任何地方(容器或类似的)都有足够的存储空间。因此,它不需要提供第二个。 @Caleth 谢谢你以上是关于C++:为啥输出迭代器不支持比较操作?的主要内容,如果未能解决你的问题,请参考以下文章
为什么迭代器只能被一个集合使用呢 为什么迭代器不能在迭代过程中 ?增删呢 是因为 每次迭代时候 把之前的元素给拿出去了 如果你在操作过程中将下一个迭代元素给拿走了(迭代器不具备自动判断长度功能 她依旧
我用VC++写的存图像的程序,为啥保存了的BMP图像打不开,说是照片查看器不支持此个格式,
C++ for-each 语句触发“向量迭代器不兼容”断言失败:this->_Getcont() == 0