Namensräume
Varianten
Aktionen

std::input_iterator

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
input_iterator
(C++20)

Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Bereichszugriff
(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 in 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 Konzept input_iterator ist eine Verfeinerung von input_or_output_iterator. Es fügt die Anforderung hinzu, dass die referenzierten Werte gelesen werden können (über indirectly_readable) und dass das Iterator-Konzept-Tag vorhanden ist.

Inhalt

[bearbeiten] Bestimmung des Iterator-Konzepts

Die Definition dieses Konzepts wird über ein expositions-only-Alias-Template /*ITER_CONCEPT*/ spezifiziert.

Um /*ITER_CONCEPT*/<I> zu bestimmen, sei ITER_TRAITS<I> eine Bezeichnung für /*ITER_TRAITS*/, wenn die Spezialisierung std::iterator_traits<I> aus der primären Vorlage generiert wird, oder std::iterator_traits<I> andernfalls.

  • Wenn ITER_TRAITS<I>::iterator_concept gültig ist und einen Typ benennt, bezeichnet /*ITER_CONCEPT*/<I> diesen Typ.
  • Andernfalls, wenn ITER_TRAITS<I>::iterator_category gültig ist und einen Typ benennt, bezeichnet /*ITER_CONCEPT*/<I> diesen Typ.
  • Andernfalls, wenn std::iterator_traits<I> aus der primären Vorlage generiert wird, bezeichnet /*ITER_CONCEPT*/<I> std::random_access_iterator_tag.
  • Andernfalls bezeichnet /*ITER_CONCEPT*/<I> keinen Typ und führt zu einem Substitutionsfehler.

[bearbeiten] Anmerkungen

Im Gegensatz zu den LegacyInputIterator-Anforderungen erfordert das Konzept input_iterator keine equality_comparable-Fähigkeit, da Eingabe-Iteratoren typischerweise mit Sentinels verglichen werden.

[bearbeiten] Beispiel

Ein minimaler Eingabe-Iterator.

#include <cstddef>
#include <iterator>
 
struct SimpleInputIterator
{
    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>);

[bearbeiten] Siehe auch

spezifiziert, dass Objekte eines Typs inkrementiert und dereferenziert werden können
(Konzept) [bearbeiten]
gibt an, dass ein input_iterator ein Forward-Iterator ist, der Gleichheitsvergleiche und Mehrfachdurchläufe unterstützt
(Konzept) [bearbeiten]