Espacios de nombres
Variantes
Acciones

std::input_or_output_iterator

De cppreference.com
< cpp‎ | iterator
 
 
Biblioteca de iteradores
Conceptos de iteradores
input_or_output_iterator
(C++20)
Primitivas de iteradores
Conceptos de algoritmos y servicios
Conceptos invocables indirectos
Requerimientos comunes de algoritmos
Servicios
Adaptadores de iteradores
Iteradores de flujos
Puntos de personalización de iteradores
Operaciones de iteradores
(C++11)
(C++11)
Acceso a rangos
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
Definido en el archivo de encabezado <iterator>
template< class I >

    concept input_or_output_iterator =
        requires(I i) {
            { *i } -> /*can-reference*/;
        } &&

        std::weakly_incrementable<I>;
(desde C++20)

El concepto input_or_output_iterator forma la base de la taxonomía del concepto de iterador; cada tipo de iterador satisface los requisitos de input_or_output_iterator.

El concepto de solo exposición /*can-reference*/ se satisface si y solo si el tipo es referenciable.

[editar] Notas

input_or_output_iterator en sí mismo solo especifica operaciones para desreferenciar e incrementar un iterador. La mayoría de los algoritmos requerirán operaciones adicionales. Por ejemplo:

A diferencia de los requisitos de IteradorLegado, el concepto input_or_output_iterator no requiere copiabilidad.

Se requiere que *i conserve la igualdad, aunque las operaciones de incremento requeridas por weakly_incrementable no lo hagan.

[editar] Ejemplo

Un iterador mínimo.

#include <cstddef>
#include <iterator>
 
struct IteradorSimple
{
    using difference_type = std::ptrdiff_t;
 
    int operator*();
 
    IteradorSimple& operator++();
    void operator++(int) { ++*this; }
};
 
static_assert(std::input_or_output_iterator<IteradorSimple>);