На этом шаге мы рассмотрим итераторы вывода.
Итераторы вывода составляют пару с итераторами ввода. Они тоже перемещаются только вперед, но выполняют запись. Таким образом, присваивание новых значений выполняется только для отдельных элементов. Итератор вывода не может использоваться для повторного перебора интервала. Запись производится в некую абстрактную "черную дыру"; если вы повторно записываете данные в той же позиции в исходную "черную дыру", ничто не гарантирует, что они будут записаны поверх предыдущих данных. В таблице 1 перечислены операции итераторов вывода.
Выражение | Описание |
---|---|
*iter=value | Записывает value в позицию, определяемую итератором |
++iter | Смещение вперед (возвращает новую позицию) |
iter++ | Смещение вперед (возвращает старую позицию) |
TYPE(iter) | Копирование итератора (копирующий конструктор) |
Обратите внимание: для итераторов вывода операции сравнения не нужны. Вам не удастся проверить, действителен ли итератор вывода и успешно ли состоялась "запись". Возможна только запись и ничего более.
На практике итераторы обычно поддерживают как чтение, так и запись. Абсолютное большинство итераторов обладает свойствами итераторов вывода (как и итераторов ввода). Типичным примером "чистого" итератора вывода служит итератор для записи в стандартный выходной поток данных (например, на экран или на принтер), Если использовать два итератора вывода для записи на экран, то второе слово будет выводиться после первого, а не поверх него. Другой типичный пример итератора вывода - итератор вставки, предназначенный для занесения новых значений в контейнер. Операция присваивания приводит к тому, что в контейнер вставляется новый элемент. При последующей записи второе значение не стирает первое, а просто вставляется отдельно от него.
На следующем шаге мы рассмотрим прямые итераторы.