Входные и выходные итераторы могут быть заменены? - PullRequest
0 голосов
/ 13 апреля 2020

Итераторы ввода Итераторы вывода

Swappable: значение, на которое указывают эти итераторы, можно обменять или поменять местами.

В этих двух ссылках указано, что значение, на которое указывают входные итераторы или выходные итераторы, можно обменять или поменялись местами. Я не уверен, что они имеют в виду. В случае входных итераторов, как бы вы изменили указанное значение, если вы не можете назначить его? В случае выходных итераторов, как вы узнаете, какое значение записать, когда не можете прочитать значения?

Также указано, что выходные итераторы нельзя сравнивать на равенство. Почему?

1 Ответ

2 голосов
/ 13 апреля 2020

Это не значит, что вы можете поменять значения с помощью этих итераторов и вообще не поменять местами значения. Или, если он говорит, что это неправильно.

Своппинг является требованием к типу итератора; это лишь одно из нескольких основных правил для итераторов ([iterator.iterators/2.1]).


Что касается сравнения выходных итераторов на равенство, то это утверждение по крайней мере частично ложно. Выходные итераторы не требуются для поддержки проверок на равенство, но все же могут ([iterator.concept.output/1]). Там, где они не могут, это потому, что нет логического способа реализовать это. Например, вне моей головы, ostream_iterator, вероятно, попадает в эту категорию, потому что, где он «указывает»? Как вы это представляете?


Таким образом, веб-сайт в лучшем случае вводит в заблуждение (в худшем случае это просто неправильно), но именно поэтому мы не учим C ++ на случайных веб-сайтах.

...