2-dimensionalen Vektor füllen C++

Gast #5771810
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?
Gast #5771828
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
   }
Gast #5771871
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
#5772186
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren