std::input_or_output_iterator
Definido en el archivo de encabezado <iterator> | ||
template<class I > concept input_or_output_iterator = | (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:
- comparar iteradores con centinelas (véase
sentinel_for
); - leer valores de un iterador (véase
indirectly_readable
einput_iterator
); - escribir valores a un iterador (véase
indirectly_writable
youtput_iterator
); - un conjunto más rico de movimientos de iterador (véase
forward_iterator
,bidirectional_iterator
,random_access_iterator
).
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>);