std::input_iterator
| Definido en el archivo de encabezado <iterator>
|
||
template<class I> concept input_iterator = std::input_or_output_iterator<I> && std::indirectly_readable<I> && requires { typename /*CONCEPTO_ITER*/<I>; } && std::derived_from</*CONCEPTO_ITER*/<I>, std::input_iterator_tag>; |
(desde C++20) | |
El concepto input_iterator es un refinamiento de input_or_output_iterator, agregando el requisito de que los valores referenciados puedan leerse (a través de indirectly_readable) y el requisito de que la etiqueta del concepto de iterador esté presente.
Determinación del concepto de iterador
La definición de este concepto se especifica mediante una plantilla de alias de solo exposición /*CONCEPTO_ITER*/.
Para determinar /*CONCEPTO_ITER*/<I>, dejemos que RASGOS_ITER<I> denote I si la especialización std::iterator_traits<I> se genera a partir de la plantilla principal, o std::iterator_traits<I> de lo contrario:
- Si
RASGOS_ITER<I>::iterator_conceptes válido y nombra un tipo,/*CONCEPTO_ITER*/<I>denota el tipo. - De lo contrario, si
RASGOS_ITER<I>::iterator_categoryes válido y nombra un tipo,/*CONCEPTO_ITER*/<I>denota el tipo. - De lo contrario, si
std::iterator_traits <I>se genera a partir de la plantilla principal,/*CONCEPTO_ITER*/<I>denota std::random_access_iterator_tag. - De lo contrario,
/*CONCEPTO_ITER*/<I>no denota un tipo y da como resultado un error de sustitución.
Notas
A diferencia de los requisitos de IteradorDeEntradaLegado, el concepto input_iterator no requiere equality_comparable, ya que los iteradores de entrada generalmente se comparan con centinelas.
Véase también
| Especifica que los objetos de un tipo pueden incrementarse y desreferenciarse. (concepto) |