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

问题描述 投票:-1回答:1

我已经读过除输出迭代器之外的所有其他类别的迭代器至少支持==和!=运算符。

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

c++ stl iterator
1个回答
5
投票

不禁止对i1i2进行比较。 std::vector::iteratorOutputIterator,你可以比较它们。你不能做的是假设可以比较所有的OutputIterators。

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

我们已经遇到迭代器类别之一具有过于繁琐的要求的情况:ForwardIterator要求解除引用返回引用类型。这意味着任何代理迭代器都限于InputIterator,即使它支持--+=-=等。

如果您发现自己编写了多个想要写入的函数,直到它们“填充”了一个输出,您可以考虑定义一个类别ComparableOutputIterator(或某些名称),并且需要==以及OutputIterator作为该类别的成员资格。

© www.soinside.com 2019 - 2024. All rights reserved.