std::output_iterator
| Definido en el archivo de encabezado <iterator>
|
||
template <class I, class T> concept output_iterator = std::input_or_output_iterator<I> && std::indirectly_writable<I, T> && requires(I i, T&& t) { *i++ = std::forward<T>(t); // no se requiere que conserve la igualdad }; |
(desde C++20) | |
El concepto output_iterator es un refinamiento de input_or_output_iterator, añadiendo el requerimiento que puede ser usado para escribir valores de tipo y categoría de valor codificada por T (via indirectly_writable). equality_comparable no se requiere.
Requerimientos semánticos
Dejemos que E sea una expresión tal que decltype((E)) es T, e i sea un objeto desreferenciable de tipo I. output_iterator<I, T> es modelado solo si todos los conceptos que subsume se modelan, y *i++ = E; tiene efectos equivalentes a *i = E; ++i;.
Conservación de la igualdad
Una expresión es conservadora de igualdad si resulta en salidas iguales dadas entradas iguales.
- Las entradas de una expresión consisten en sus operandos.
- Las salidas de una expresión consisten en su resultado y todos los operandos modificados por la expresión (si es que los hay).
Cada expresión que se requiere sea conservadora de igualdad, se requiere además que sea estable: dos evaluaciones de tal expresión con los mismos objetos de entrada debe tener salidas iguales si no se encuentra alguna modificación interventora de esos objetos de entrada.
Notas
A diferencia de los requerimientos de OutputIterator, el concepto output_iterator no requiere que la etiqueta de la categoría del iterador se defina.
Los algoritmos en iteradores de salida deberán ser de un solo recorrido.
Véase también
| Especifica que los objetos de un tipo pueden incrementarse y desreferenciarse. (concepto) |