dyn. Matrix mit vector<vector<int>>



  • Hallo Leute,

    ich brauche mal eure Hilfe beim Umgang mit einer dynamischen Matrix.

    Ich möchte eine Klasse schreiben, die Matrizenrechnungen für mich ausführt. Dazu gehört auch eine vorhandene Matrix zu erweitern. Ich möchte aber nicht einfach etwas anhängen, sondern eine neue Zeile + Spalte irgendwo einfügen können.

    Die Matrix soll immer eine "n x n" Matrix sein, daher Zeilenanzahl == Spaltenanzahl.

    vector<vector<int>> Matrix;
    vector<vector<int>>::iterator it;
    

    Das einfache anhängen funktioniert ja ungefähr so:

    for ( int i = 0; i < 5; i++ ) {
         Matrix.push_back ( vector<int>() );
    
         for ( int j = 0; j < 5; j++ )
              Matrix[Matrix.size()].push_back ( someVar );
    }
    

    Ich möchte jetzt folgende Methode realisieren:

    int calc::insert(int nodeID)
    {
        //...füge eine neue Spalte an der Position "nodeID" ein und fülle alle Elemente mit 0.
        //...füge eine neue Zeile an der Position "nodeID" ein und fülle alle Elemente mit 0.
    }
    

    Die Idee dabei ist, dass die Spalten hinter der neuen Spalte nach hinten verschoben werden. Das gleiche gilt für die Zeilen unterhalb von Zeile "nodeID". Die neue Zeile und neue Spalte soll dann vorerst mit Nullen gefüllt werden, dass sollte aber mit einer for-Schleife kein Problem sein.

    Ich hoffe man versteht was ich meine 🙂 Sonst einfach Bescheid sagen.

    Gruß
    WAR][FIRE



  • WAR][FIRE schrieb:

    Matrix[Matrix.size()].push_back...
           ^^^^^^^^^^^^^
    

    Das ist ein ungültiger Index.

    Was ist denn eigentlich das Problem hier? Das konnte Ich Deinem Post nicht entnehmen.


  • Mod

    WAR][FIRE schrieb:

    Ich hoffe man versteht was ich meine 🙂 Sonst einfach Bescheid sagen.

    Ich verstehe was du meinst, aber nicht, was du wissen willst. Füg doch einfach Elemente ein.

    edit: Nur um ganz sicher zu gehen: Vielleicht fehlt dir dies?
    http://www.cplusplus.com/reference/stl/vector/insert/



  • Ja ...size()-1 dann, aber das sollte auch nur ein Beispiel sein.

    Mein Problem ist, dass ich nicht wirklich weiß, wie ich eine dynamische Matrix aus zwei Vectoren so erweitern kann, dass ich z.B. in der Mitte etwas einfüge und dann der rechte Teil der Matrix (also alle Spalten hinter der neuen) sich nach rechts verschieben. Analog sollte das ganze mit den Zeilen gemacht werden.

    Beispiel:

    In einer 8 x 8 Matrix...

    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    

    ...soll in der Mitte eine neue Zeile und Spalte eingefügt werden (zur Veranschaulichung(!) mit Einsen):

    0 0 0 0 1 0 0 0 0
    0 0 0 0 1 0 0 0 0
    0 0 0 0 1 0 0 0 0
    0 0 0 0 1 0 0 0 0
    1 1 1 1 1 1 1 1 1
    0 0 0 0 1 0 0 0 0
    0 0 0 0 1 0 0 0 0
    0 0 0 0 1 0 0 0 0
    0 0 0 0 1 0 0 0 0
    

    "nodeID" wäre in diesem Fall 5 gewesen. Nur: Wie mache ich dass mit den Vectoren?



  • RTFM.

    vector<>::insert



  • thx, jetzt funktioniert es.


Anmelden zum Antworten