std:: input_or_output_iterator
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definido en el encabezado
<iterator>
|
||
|
template
<
class
I
>
concepto input_or_output_iterator
=
|
(desde C++20) | |
El concepto
input_or_output_iterator
constituye la base de la taxonomía de conceptos de iteradores; 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 referenceable .
Notas
input_or_output_iterator
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 (ver
sentinel_for); -
leer valores desde un iterador (ver
indirectly_readableyinput_iterator); -
escribir valores a un iterador (ver
indirectly_writableyoutput_iterator); -
un conjunto más rico de movimientos de iteradores (ver
forward_iterator,bidirectional_iterator,random_access_iterator).
A diferencia de los
LegacyIterator
requirements, el concepto
input_or_output_iterator
no requiere capacidad de copia.
*
i
debe ser de preservación de igualdad, aunque las operaciones de incremento requeridas por
weakly_incrementable
no lo son.
Ejemplo
Un iterador mínimo.
#include <cstddef> #include <iterator> struct SimpleIterator { using difference_type = std::ptrdiff_t; int operator*(); SimpleIterator& operator++(); void operator++(int) { ++*this; } }; static_assert(std::input_or_output_iterator<SimpleIterator>);