Zweidimensionaler vector



  • Hab mir jetz ein paar Tutorials über vector durchgelesen, aber es wurde einfach nirgends erwähnt, wie man etwas in einen zwei/mehrdimensionalen vector einfügt. Wie genau lautet denn die Syntax?

    Will ein Bild einlesen und hab ihn folgendermaßen erzeugt:

    vector< vector<char> > Pixel;
    


  • Pixel[0][0] = 42;
    

    😕

    edit: wenn du vorher weißt wie groß der vector sein muss soltest du ihn so anlegen:

    vector<vector<char> > Pixel(800, vector<char>(600));
    


  • Leider weiß ich erst wie groß er werden muss, wenn die Datei geöffnet und der Header ausgelesen ist.

    Soll man den [] Operator eigentlich verwenden? Hab gelesen, dass .at viel sinnvoller wäre da es überprüft, ob der Index auch vorhanden ist.

    Da ich aber nicht weiß, wie groß das Array ist, muss ich doch push_back verwenden, oder nicht?



  • pippo schrieb:

    Da ich aber nicht weiß, wie groß das Array ist, muss ich doch push_back verwenden, oder nicht?

    vector<vector<char> > pixel;
    pixel.push_back( vector<char>() );
    pixel[0].push_back(42);
    

    pippo schrieb:

    Soll man den [] Operator eigentlich verwenden? Hab gelesen, dass .at viel sinnvoller wäre da es überprüft, ob der Index auch vorhanden ist.

    cout << pixel[0][0];
    cout << pixel.at(0).at(0);
    


  • pippo schrieb:

    Soll man den [] Operator eigentlich verwenden?

    Sicher. Warum nicht? Wenn du mit einem ungültigen Index zugreifst, dann liegt das idR daran, dass deine Programmlogik fehlerhaft ist und nicht, dass du die falsche Funktion/Operator benutzt. Du solltest dir darüber im Klaren sein, dass at() immer eine Bereichsprüfung durchführt. Wenn du also viele Zugriffe hast, kann sich das durchaus negativ auf die Performance auswirken.



  • pippo schrieb:

    Da ich aber nicht weiß, wie groß das Array ist, muss ich doch push_back verwenden, oder nicht?

    Musst du nicht:

    // Dimensionen einlesen
    size_t width  = ...;
    size_t height = ...;
    // ...
    pixel.insert(pixel.begin(), width, vector<byte>(height));
    


  • Kann ich das auch so machen?

    vector< vector<char> > Pixel(bFH.biHeight, vector<char>(bFH.biWidth));
    

    Was sich jetz doch schwieriger als erwartet herausgestellt hat, ist das Übergeben des vectors an eine Funktion. Wie macht man denn das noch? 😃



  • foo(std::vector<std::vector<char> > &bla){
    
    }
    


  • Für sowas kann man auch schon mal typedef bemühen. Damit spart man sich Schreibarbeit und es wird lesbarer.
    ZB

    typedef vector<vector<char> > vector2;
    

Anmelden zum Antworten