std:: input_iterator
|
Definiert im Header
<iterator>
|
||
|
template
<
class
I
>
concept input_iterator
=
|
(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>);
` 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
|
(C++20)
|
spezifiziert, dass Objekte eines Typs inkrementiert und dereferenziert werden können
(Konzept) |
|
(C++20)
|
spezifiziert, dass ein
input_iterator
ein Forward-Iterator ist, der Gleichheitsvergleiche und Multi-Pass unterstützt
(Konzept) |