Namespaces
Variants

std:: istream_iterator

From cppreference.net
Iterator library
Iterator concepts
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 T,

class CharT = char ,
class Traits = std:: char_traits < CharT > ,
class Distance = std:: ptrdiff_t >
class istream_iterator

: public std:: iterator < std:: input_iterator_tag , T, Distance, const T * , const T & >
(bis C++17)
template < class T,

class CharT = char ,
class Traits = std:: char_traits < CharT > ,
class Distance = std:: ptrdiff_t >

class istream_iterator ;
(seit C++17)

std::istream_iterator ist ein Einzel-Durchlauf-Eingabeiterator, der aufeinanderfolgende Objekte des Typs T aus dem std::basic_istream -Objekt liest, für das er konstruiert wurde, durch Aufruf des entsprechenden operator >> . Die eigentliche Leseoperation wird durchgeführt, wenn der Iterator inkrementiert wird, nicht wenn er dereferenziert wird. Das erste Objekt wird gelesen, wenn der Iterator konstruiert wird. Das Dereferenzieren gibt nur eine Kopie des zuletzt gelesenen Objekts zurück.

Der standardmäßig konstruierte std::istream_iterator wird als End-of-Stream-Iterator bezeichnet. Wenn ein gültiger std::istream_iterator das Ende des zugrunde liegenden Streams erreicht, wird er gleich dem End-of-Stream-Iterator. Das Dereferenzieren oder weitere Inkrementieren ruft undefiniertes Verhalten hervor. Ein End-of-Stream-Iterator verbleibt im End-of-Stream-Zustand, selbst wenn sich der Zustand des zugrunde liegenden Streams ändert. Ohne Neuzuweisung kann er nicht mehr zu einem Nicht-End-of-Stream-Iterator werden.

Eine typische Implementierung von std::istream_iterator enthält zwei Datenmember: einen Zeiger auf das zugehörige std::basic_istream -Objekt und den zuletzt gelesenen Wert vom Typ T .

T muss die Anforderungen DefaultConstructible , CopyConstructible und CopyAssignable erfüllen.

Inhaltsverzeichnis

Mitgliedertypen

Mitgliedertyp Definition
iterator_category std:: input_iterator_tag
value_type T
difference_type Distance
pointer const T *
reference const T &
char_type CharT
traits_type Traits
istream_type std:: basic_istream < CharT, Traits >

Die Member-Typen iterator_category , value_type , difference_type , pointer und reference müssen durch Vererbung von std:: iterator < std:: input_iterator_tag , T, Distance, const T * , const T & > erhalten werden.

(bis C++17)

Memberfunktionen

Konstruiert einen neuen istream_iterator
(öffentliche Elementfunktion)
Zerstört einen istream_iterator , einschließlich des zwischengespeicherten Werts
(öffentliche Elementfunktion)
gibt das aktuelle Element zurück
(öffentliche Elementfunktion)
erhöht den Iterator
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

(entfernt in C++20)
vergleicht zwei istream_iterator s
(Funktions-Template)

Hinweise

Beim Lesen von Zeichen überspringt std::istream_iterator standardmäßig Leerzeichen (sofern nicht mit std::noskipws oder Äquivalent deaktiviert), während std::istreambuf_iterator dies nicht tut. Zudem ist std::istreambuf_iterator effizienter, da es den Overhead vermeidet, das Sentry-Objekt einmal pro Zeichen zu konstruieren und zu destruieren.

Beispiel

#include <algorithm>
#include <iostream>
#include <iterator>
#include <numeric>
#include <sstream>
int main()
{
    std::istringstream str("0.1 0.2 0.3 0.4");
    std::partial_sum(std::istream_iterator<double>(str),
                     std::istream_iterator<double>(),
                     std::ostream_iterator<double>(std::cout, " "));
    std::istringstream str2("1 3 5 7 8 9 10");
    auto it = std::find_if(std::istream_iterator<int>(str2),
                           std::istream_iterator<int>(),
                           [](int i){ return i % 2 == 0; });
    if (it != std::istream_iterator<int>())
        std::cout << "\nThe first even number is " << *it << ".\n";
    //" 9 10" left in the stream
}

Ausgabe:

0.1 0.3 0.6 1 
The first even number is 8.

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
P0738R2 C++98 das erste Lesen könnte auf die erste Dereferenzierung verschoben werden immer im Konstruktor durchgeführt

Siehe auch

Ausgabe-Iterator, der in std::basic_ostream schreibt
(Klassentemplate)
Eingabe-Iterator, der von std::basic_streambuf liest
(Klassentemplate)