Vektoren ausgeben?



  • hallo welt!
    kann man sich z.b. vector <string> v; ausgeben lassen?
    mit printf unt cout << gehts schonmal nicht...
    denn in der entwicklungsphase ist es nervig, jedesmal bei mehrdimensionalen vektoren, um deren inhalt zu sehen, alles manuell auszulesen oder ne neue funktion dafür zu schreiben...
    danke für tipps



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • also bei einem eindimensionalem vector ist es ja einfach, sich den inhalt anzeigen zu lassen:

    vector<string> v;
    
    for(vector<string>::iterator i = v.begin(); i != v.end(); ++i)     //inetwa so... 
        cout << *i << endl;
    

    du musst dir dazu mal die iteratoren angucken...

    P.S.: Beim obigen code bin ich mir auf die richtigkeit nicht sicher... bitte korrigieren, falls es falsch ist
    P.P.S.: Da musst du dir dann überlegen, wie man dies auf mehrdimensionale vectoren anwenden könnte...



  • leech schrieb:

    also bei einem eindimensionalem vector ist es ja einfach, sich den inhalt anzeigen zu lassen:

    vector<string> v;
    
    for(vector<string>::iterator i = v.begin(); i != v.end(); ++i)     //inetwa so... 
        cout << *i << endl;
    

    Einfacher:

    copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
    


  • hallo!
    wie schon gesagt, habe ich bereits eine routine, die das macht.
    die frage war, ob es da schon ne standardd funktion gibt...
    also: nein, oder?



  • Doch gibt es copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));, wie Hume bereits gezeigt hat.



  • Als Alternative könntest du auch den << Operator dafür überladen dann kannst ganz einfach cout << DeinVector verwenden so etwa:

    ostream &operator<<(ostream &stream, vector<string> DerVector)
    {
    for(vector<string>::iterator i = DerVector.begin(); i != DerVector.end(); ++i)
        stream << *i << endl;
    return stream;
    }
    //jetzt geht sowas:
    cout << MeinVector_aus_Strings;
    


  • tobZel schrieb:

    Als Alternative könntest du auch den << Operator dafür überladen dann kannst ganz einfach cout << DeinVector verwenden so etwa:

    Wobei ich dann vorschlagen würde, (a) den Vektor als konstante Referenz zu übergeben und (b) die Funktion als Template für ALLE vector<> zu definieren.
    (aber schneller als der copy()-Aufruf dürfte das auch nicht sein)


Anmelden zum Antworten