Mit Algorithmus in Standardausgabe schreiben



  • Hey,

    Und gleich noch ne Frage *gg*
    Der folgende Code soll angeblich alle im Iteratorbereich von Cin eingelesenen Werte in die Standardausgabe schreiben.
    Allerdings geordnet nach Größe.

    #include <iterator>
    #include "maki.h"
    #include <fstream>
    #include <sstream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main(void)
    {
        istream_iterator<int> cin_it(cin);
        istream_iterator<int> end_of_stream;
        vector<int> vec(cin_it,end_of_stream);
        sort(vec.begin(),vec.end());
        ostream_iterator<int> output(cout, " ");
        unique_copy(vec.begin(),vec.end(),output);
        system("pause");
    }
    

    Bei der Vektordefinition wird 'cin' abgefragt.
    Nachdem der Benutzer [ENTER] drückt passiert jedoch leider nichts.
    Normalerweise müsste cin so lange Werte einlesen bis der Buffer voll wäre oder ein anderer Fehler auftritt und diese dann mit der letzten Zeile in die Standardausgabe schreiben.

    Tuts aber leider nicht. 😢

    cya
    David



  • Wenn der Benutzer Enter drückt, zählt das auch nicht als Fehler - der Iterator hört erst auf zu lesen, wenn der op>> den Stream in einen Fehlerstatus setzt (entweder EOF oder ungültige Eingaben).



  • BTW: Mit dem cpp-Tags liest es sich für uns angenehmer... 😉

    ...
        vector<int> vec(istream_iterator<int>(cin),istream_iterator<int>());
    ...
    

    Das müsste es auch tun - und die Variablen cin_it und end_of_stream überflüssig machen.

    Gruß,

    Simon2.



  • Hmm dürfte so eh nicht kompilieren <iostream> fehlt ^^

    #include <iterator>
    #include <vector>
    #include <algorithm>
    #include <iostream>
    #include <limits>
    
    std::istream& clear_stream(std::istream& in)
    { return in.clear(), in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
    
    int main()
    {
        std::vector<int> vec_data(std::istream_iterator<int>(std::cin), std::istream_iterator<int>());
        std::sort(vec_data.begin(), vec_data.end());
        std::unique_copy(vec_data.begin(), vec_data.end(), std::ostream_iterator<int>(std::cout, " "));
    
        clear_stream(std::cin).get();
    }
    

    ... std::system("pause") raus und dafür ordentliche C++-Variante genommen ^^



  • iostream fehlt nicht.
    im Header 'maki.h' von mir ist die schon drin 😉

    Aber das könnt ihr natürlich nicht wissen.
    Also leider liest die Vectordefinition nur einen Wert aus Cin und das Proggi wird dann beendet- echt etwas komisch.



  • Hi,

    was hast Du denn eingegeben ?

    Gruß,

    Simon2.



  • Oh das Problem hat sich erledigt - ich sag jetzt aber nicht, wo der Fehler lag.
    Jedenfalls nicht im Quelltext :p 😋 :p



  • 777 schrieb:

    Oh das Problem hat sich erledigt - ich sag jetzt aber nicht, wo der Fehler lag.
    Jedenfalls nicht im Quelltext :p 😋 :p

    Dachte ich mir. :p 😃

    Gruß,

    Simon2.



  • 777 schrieb:

    Oh das Problem hat sich erledigt - ich sag jetzt aber nicht, wo der Fehler lag.
    Jedenfalls nicht im Quelltext :p 😋 :p

    Das Problem sitzt eh in 99% aller Fälle vor dem Bildschirm 😉


Anmelden zum Antworten