Forum: PC-Programmierung 2-dimensionalen Vektor füllen C++


von cvier (Gast)


Lesenswert?

Hi zusammen, wie fülle ich einen 2-dimensionalen Vektor wenn ich ihn zu 
Beginn nicht initialisieren? Beispiel mit einer 3x3 Matrix:
1
vector< vector<int> > vec;
2
3
for(int i=0; i<3; ++i)
4
    for(int j=0; j<3; ++j)
5
        vec[i][j].push_back(0);

Das war meine Idee, funktioniert aber nicht, wer weis was nicht stimmt 
und wie es richtig gemacht wird?

von M.A. S. (mse2)


Lesenswert?

Nur quergelesen. Hilft Dir dies?
http://www.cplusplus.com/forum/general/833/

von Vincent H. (vinci)


Lesenswert?

Du greifst via dem 2.Subscript Operator ([j]) bereits auf den Wert des 
inneren Vektors zu. Wenn du innerhalb der 2.Schleife push_back aufrufst, 
so muss dies auf den Typ des äußeren Vektors wirken, nicht auf jenen des 
innern.

von Brudi (Gast)


Lesenswert?

Du musst für jede Dimension einen neuen Vektor aus Ints erst einfügen, 
siehe Zeile mit Wichtig!
1
std::vector<std::vector<int>> myvector;
2
3
    for(int i=0; i<3; ++i) {
4
        myvector.push_back(std::vector<int>()); // Wichtig!
5
        for(int j=0; j<3; ++j) {
6
            myvector[i].push_back(0);
7
        }
8
   }

von 14 (Gast)


Lesenswert?

1
vector< vector<int> > vec_2d = { {1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10} };

ab c++14 oderso

von cvier (Gast)


Lesenswert?

14 schrieb:
> ab c++14 oderso

Das funktioniert aber nur wenn ich von Anfang an weiß wie groß mein 
Vektor sein soll, in meinem Fall soll das abhängig von der 
Benutzeriengabe sein.

von cvier (Gast)


Lesenswert?

cvier schrieb:
> 14 schrieb:
>> ab c++14 oderso
>
> Das funktioniert aber nur wenn ich von Anfang an weiß wie groß mein
> Vektor sein soll, in meinem Fall soll das abhängig von der
> Benutzeriengabe sein.

die anderen Antworten teste ich mal durch, danke vorab schonmal

von M.K. B. (mkbit)


Lesenswert?

Brudi schrieb:
> Du musst für jede Dimension einen neuen Vektor aus Ints erst einfügen,
> siehe Zeile mit Wichtig!

Das folgende habe ich mal schnell aufgeschrieben, aber noch nicht im 
Compiler testen können. Erfordert C++11.
1
std::vector<std::vector<int>> v(3);
2
3
for(std::vector<int>& v2 : v)
4
   v2.assign(3,0);

Das erspart ein paar mallocs, weil die Größe des Vektors gleich 
mitgegeben wird.

von cvier (Gast)


Lesenswert?

Das ist wonach ich gesucht habe. Nur die Funktion assign() habe ich 
nicht gekannt. Thx

von AbcAbc (Gast)


Lesenswert?

So schwer ist das auch nicht in der Doku nachzuschauen:
https://de.cppreference.com/w/cpp/container/vector

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.