std::input_or_output_iterator
De cppreference.com
<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:
- comparar iteradores con centinelas (véase
sentinel_for); - leer valores de un iterador (véase
indirectly_readableeinput_iterator); - escribir valores a un iterador (véase
indirectly_writableyoutput_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.
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>);