Eigener Iterator nötig?
-
Hallo,
erst einmal ein Beispiel:
#include <iostream> #include <vector> #include <iterator> int main(int argc, char *argv[]) { std::vector<MyType> vec((std::istream_iterator<MyType>(std::cin)), std::istream_iterator<MyType>()); std::copy(vec.begin(), vec.end(), std::ostream_iterator<MyType>(std::cout, "\t"); std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.get(); return 0; }
Für
typedef int MyType;
lässt sich klar sagen, dass das Konstruieren desvector<int>
beginnt(*), sobald eine ungültige Eingabe getätigt wird, d.h. keine oder zu große Zahl.Lese ich nun aber
char
s ein, lässt sich der Vorgang nur durch Strg+D/Strg+Z abbrechen. Gibt es eine Möglichkeit, dem Iterator einchar
mitzugeben, bei dem die Eingabe als ungültig erklärt wird?Falls nein, wie wäre eure Lösung?
Ich dachte eventuell an einen eigenen Iterator, der die Eingabe entgegen nimmt und gegen einen vorgegebenen Wert überprüft und ggf. das eof()-Flag setzt.
* So wie ich das verstehe, wird erst - bis good() false liefert - eingelesen und der Iterator dann dem Konstruktor übergeben, stimmt das soweit?