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