Espacios de nombres
Variantes

std::input_or_output_iterator

De cppreference.com
 
 
Biblioteca de iteradores
Conceptos de iteradores
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)
 
<tbody> </tbody>
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.

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.

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>);