C ++: почему выходные итераторы не поддерживают операции сравнения? - PullRequest
0 голосов
/ 19 февраля 2019

Я читал, что, кроме выходных итераторов, все другие категории итераторов поддерживают как минимум операторы == и! =.

Почему выходные итераторы не поддерживают это?

1 Ответ

0 голосов
/ 19 февраля 2019

Сравнение i1 и i2 не запрещено .std::vector::iterator - это OutputIterator, и вы можете сравнить их.Что вы не можете сделать, так это предположить, что все OutputIterator s можно сравнить.

Все, что говорится в концепции, это то, что не требуется , чтобы тип, поддерживающий сравнение, был OutputIterator, потому что требование этого означало бы некоторые вещи, которые действительно заслуживаютбыть OutputIterator s не.Примером может служить @ итератор ленты NathanOliver .Другой пример: std::ostream_iterator

У нас уже есть ситуация, когда к одной из категорий итераторов предъявляются слишком обременительные требования: ForwardIterator требует, чтобы разыменование возвращало ссылочный тип.Это означает, что любой прокси-итератор ограничен InputIterator, даже если он поддерживает --, +=, -= и т. Д.

Если вы пишете несколько функций, которые хотите писать, пока они не получат«заполнив» вывод, вы можете подумать об определении категории ComparableOutputIterator (или о таком имени) и потребовать ==, а также OutputIterator для членства в этой категории.

...