2017-11-30 6 views
3

Ich habe obigen Code in C++ STL.Lesen von int-Daten aus Datei mit iStream

Der obige Code funktioniert.

Wir erstellen Anfang und Ende Iterator als Daten beginnen und Daten enden. Aber dataEnd ist nicht mit der Datendatei verknüpft. Wie Liste kennt die Reichweite?

+0

Denken Sie an 'DataEnd' als eine verherrlichte EOF-Konstante, –

Antwort

4

Es ist üblich, das als std::istream_iterator<int> eos; zu sehen, wie zum Beispiel im Beispiel ref, aber in Ihrem Fall könnte der von Ihnen gewählte Name besser passen.

Es ist eine Analogie zu EOF, die für die Standardeingabe das Ende der Datei 1 nach dem letzten zu lesenden Element darstellt.

eos ist so etwas wie ein letzter Iterator, der 1 nach dem letzten zu lesenden Element darstellt.

Es ist ähnlich wie EOF, aber wie Sie sehen, nicht das Gleiche. Zum Beispiel, was Sie Ihren End Stream nennen, spielt keine Rolle. In dem oben genannten Link gibt es eine mögliche Implementierung, die Sie studieren können, wenn Sie möchten.

Außerdem cpprefernce erwähnt:

Der Standard konstruierten std :: istream_iterator als bekannt ist End-of-stream Iterator. Wenn ein gültiger std :: istream_iterator das Ende des zugrunde liegenden Datenstroms erreicht, wird er gleich dem Ende des Datenstroms Iterator. Durch das Dereferenzieren oder Inkrementieren wird das undefinierte Verhalten weiter aufgerufen.

Und von cplusplus, haben wir diese:

Diese Operatoren in Header <iterator> überlastet sind.

+0

Was Sie Ihren End Stream nennen ist wirklich egal. Im Kontext des Beispiels von OP bevorzuge ich den Namen 'dataEnd' zu' eos', weil es sich offensichtlich auf das bezieht, was es markiert – Caleth

+0

Korrekt @Caleth, Antwort aktualisiert, danke! – gsamaras