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 des vector<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 ein char 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?


Log in to reply