27 Iterators library [iterators]

27.2 Iterator requirements [iterator.requirements]

27.2.4 Output iterators [output.iterators]

Тип класса или указателя X удовлетворяет требованиям итератора вывода, если X удовлетворяет Iterator требованиям, а выражения в таблице 96 действительны и имеют указанную семантику.

Таблица 96 - Требования к итератору вывода (в дополнение к Iterator)
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
*r = o результат не используется Remarks:  После этой операции r разыменование не требуется.
Postconditions: r является увеличиваемым.
++r X& &r == &++r.
Remarks:  После этой операции r разыменование не требуется.
Postconditions: r является увеличиваемым.
r++ конвертируемый в const X& { X tmp = r;
++r;
return tmp; }
Remarks:  После этой операции r разыменование не требуется.
Postconditions: r является увеличиваемым.
*r++ = o результат не используется Remarks:  После этой операции r разыменование не требуется.
Postconditions: r является увеличиваемым.

[ Note: Единственное допустимое использование - operator* находится в левой части оператора присваивания. Assignment through the same value of the iterator happens only once. Алгоритмы на итераторах вывода никогда не должны пытаться дважды пройти через один и тот же итератор. Это должны быть single pass алгоритмы. Равенство и неравенство нельзя определить. Алгоритмы, которые принимают итераторы вывода, могут использоваться с ostreams в качестве места назначения для размещения данных через ostream_­iterator класс, а также с итераторами вставки и указателями вставки. ]end note