Namespaces
Variants

std:: input_iterator

From 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)
Definiert im Header <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 > ;
(seit C++20)

Das input_iterator -Konzept ist eine Verfeinerung von input_or_output_iterator , das die Anforderung hinzufügt, dass die referenzierten Werte gelesen werden können (über indirectly_readable ) und die Anforderung, dass das Iterator-Konzept-Tag vorhanden sein muss.

Inhaltsverzeichnis

Iterator-Konzeptbestimmung

Die Definition dieses Konzepts wird über einen nur zur Darstellung dienenden Alias-Template /*ITER_CONCEPT*/ spezifiziert.

Um /*ITER_CONCEPT*/ < I > zu bestimmen, sei ITER_TRAITS < I > definiert als I falls die Spezialisierung std:: iterator_traits < I > von der Primärvorlage generiert wird, andernfalls als std:: iterator_traits < I > :

  • Falls ITER_TRAITS < I > :: iterator_concept gültig ist und einen Typ benennt, bezeichnet /*ITER_CONCEPT*/ < I > diesen Typ.
  • Andernfalls, falls ITER_TRAITS < I > :: iterator_category gültig ist und einen Typ benennt, bezeichnet /*ITER_CONCEPT*/ < I > diesen Typ.
  • Andernfalls, falls std:: iterator_traits < I > von der primären Template-Spezialisierung generiert wird, bezeichnet /*ITER_CONCEPT*/ < I > std::random_access_iterator_tag .
    (Das heißt, es wird angenommen, dass std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: input_iterator_tag > true ist.)
  • Andernfalls bezeichnet /*ITER_CONCEPT*/ < I > keinen Typ und führt zu einem Substitutionsfehler.

Hinweise

Im Gegensatz zu den LegacyInputIterator -Anforderungen verlangt das input_iterator -Konzept keine equality_comparable -Eigenschaft, da Input-Iteratoren typischerweise mit Sentinels verglichen werden.

Beispiel

Ein minimaler Eingabe-Iterator.

#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>);
**Anmerkung:** Der gesamte Code innerhalb der `
` und `` Tags wurde gemäß den Anweisungen nicht übersetzt, da es sich um C++-Code handelt. Die HTML-Struktur, Attribute und der C++-Code bleiben unverändert.

Siehe auch

spezifiziert, dass Objekte eines Typs inkrementiert und dereferenziert werden können
(Konzept)
spezifiziert, dass ein input_iterator ein Forward-Iterator ist, der Gleichheitsvergleiche und Multi-Pass unterstützt
(Konzept)