mikrocontroller.net

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


Autor: cvier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen, wie fülle ich einen 2-dimensionalen Vektor wenn ich ihn zu 
Beginn nicht initialisieren? Beispiel mit einer 3x3 Matrix:
vector< vector<int> > vec;

for(int i=0; i<3; ++i)
    for(int j=0; j<3; ++j)
        vec[i][j].push_back(0);

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

Autor: M.A. S. (mse2)
Datum:

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

Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Brudi (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Du musst für jede Dimension einen neuen Vektor aus Ints erst einfügen, 
siehe Zeile mit Wichtig!
std::vector<std::vector<int>> myvector;

    for(int i=0; i<3; ++i) {
        myvector.push_back(std::vector<int>()); // Wichtig!
        for(int j=0; j<3; ++j) {
            myvector[i].push_back(0);
        }
   }

Autor: 14 (Gast)
Datum:

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

ab c++14 oderso

Autor: cvier (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: cvier (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: M.K. B. (mkbit)
Datum:

Bewertung
1 lesenswert
nicht 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.
std::vector<std::vector<int>> v(3);

for(std::vector<int>& v2 : v)
   v2.assign(3,0);

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

Autor: cvier (Gast)
Datum:

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

Autor: AbcAbc (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.