Namespaces
Variants

std:: input_iterator

From es.cppreference.net
Iterator library
Iterator concepts
input_iterator
(C++20)

Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Definido en el encabezado <iterator>
template < class I >

concept input_iterator =
std:: input_or_output_iterator < I > &&
std:: indirectly_readable < I > &&
requires { typename /*ITER_CONCEPT*/ < I > ; } &&

std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: input_iterator_tag > ;
(desde C++20)

El concepto input_iterator es un refinamiento de input_or_output_iterator , añadiendo el requisito de que los valores referenciados puedan leerse (a través de indirectly_readable ) y el requisito de que esté presente la etiqueta del concepto de iterador.

Contenidos

Determinación del concepto de iterador

La definición de este concepto se especifica mediante un alias de plantilla solo para exposición /*ITER_CONCEPT*/ .

Para determinar /*ITER_CONCEPT*/ < I > , sea ITER_TRAITS < I > igual a I si la especialización std:: iterator_traits < I > está generada desde la plantilla principal, o std:: iterator_traits < I > en caso contrario:

  • Si ITER_TRAITS < I > :: iterator_concept es válido y nombra un tipo, /*ITER_CONCEPT*/ < I > denota el tipo.
  • De lo contrario, si ITER_TRAITS < I > :: iterator_category es válido y nombra un tipo, /*ITER_CONCEPT*/ < I > denota el tipo.
  • De lo contrario, si std:: iterator_traits < I > se genera desde la plantilla principal, /*ITER_CONCEPT*/ < I > denota std::random_access_iterator_tag .
    (Es decir, se asume que std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: input_iterator_tag > es true .)
  • De lo contrario, /*ITER_CONCEPT*/ < I > no denota un tipo y resulta en un fallo de sustitución.

Notas

A diferencia de los LegacyInputIterator requirements, el concepto input_iterator no requiere equality_comparable , ya que los input iterators normalmente se comparan con sentinels.

Ejemplo

Un iterador de entrada mínimo.

#include <cstddef>
#include <iterator>
class SimpleInputIterator
{
public:
    using difference_type = std::ptrdiff_t;
    using value_type = int;
    int operator*() const;
    SimpleInputIterator& operator++();
    void operator++(int) { ++*this; }
};
static_assert(std::input_iterator<SimpleInputIterator>);

Véase también

especifica que los objetos de un tipo pueden ser incrementados y desreferenciados
(concept)
especifica que un input_iterator es un iterador de avance, que admite comparación de igualdad y múltiples pasadas
(concept)