Vektor um Vektor erweitern



  • Hallo Programmierer 😉
    ich arbeite gerade an einer Lösung für eine Problemstellung, die ich mit dem PC lösen möchte. Dazu habe ich mir ein kleines c++ Programm geschreiben. Leider stecke ich noch in den Kinderfüßen und komme beim besten willen nicht weiter.
    Mein Problem liegt bei den Vektoren. Ich muss einen variablen Vektor erstellen, denn ich dann per Schleife jedesmal um einen Vektor erweiter, der jedesmal 3 Einträge besitzt.

    vector <vector <int> > moeglichkeit (0);
    

    zur Deklaration des Hauptvektors.

    vector <int> v (3); // erstellen des Vektors mit Dreifeldern
    /*Z.19*/ moeglichkeit.push_back(i,v); // einfügen des Vektors mit den dreifelden an der Stelle i
    /*Z.20*/ moeglichkeiten[i][1]=a; //Belegen des Vektors mit ints
    moeglichkeiten[i][2]=b;
    moeglichkeiten[i][3]=c;
    

    Mein Problem dabei sieht laut Kompiler wie folgt aus:

    anzahl.cc: In function »int main(int)«:

    anzahl.cc:19: Fehler: keine passende Funktion für Aufruf von »std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::push_back(int&, std::vector<int, std::allocator<int> >&)«
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:602:

    Anmerkung: Kandidaten sind: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = std::vector<int, std::allocator<int> >, _Alloc = std::allocator<std::vector<int, std::allocator<int> > >]

    anzahl.cc:20: Fehler: »moeglichkeiten« wurde in diesem Gültigkeitsbereich nicht definiert

    Wie ihr euch vorstellen könnt blick ich da überhaupt nicht durch.
    Ich weiß nur eins, irgendwas ist da falsch.
    Kann mir jemand helfen und mich aufklären?
    Mfg benni33



  • http://www.cppreference.com/cppvector/push_back.html
    push_back fügt immer hinten ein.
    Wenn du an einer stelle was setzen willst, dann bla[i]=v;. bla muss dann aber auch groß genug sein.



  • Hallo benni33,

    die Methode push_back hat nur einen Parameter. "push back" steht für 'hinten drauf', egal wo 'hinten' gerade ist.

    moeglichkeit.push_back(v); // einfügen des Vektors mit den dreifelden am Ende
    

    auf das gerade eingefügte - also jetzt letzte Element - kann man mit back() zugreifen. Die Indizes, mit denen auf die einzelnen Elemente zugegriffen wird, beginnen bei 0 - nicht 1.

    moeglichkeiten.back()[0]=a;  // Indizes des v(3) sind [0..2]
    moeglichkeiten.back()[1]=b;
    moeglichkeiten.back()[2]=c;
    

    Gruß
    Werner



  • und mit nem alias schaut es dann auch noch schön aus:

    std::vector< std::vector <int> > v (3); // v ist ein vector mit drei leeren vectoren
    
    moeglichkeiten[0].push_back(1)=a; //Belegen des Vektors mit ints 
    moeglichkeiten[0].push_back(1)=b; 
    moeglichkeiten[0].push_back(1)=c; //nun hat v[0] 3 elemente, v[1] und v[1] 0 Elemente
    
    auf die Elemente zugreifen:
    std::vector< int >& vec0 = moeglicheiten[0];
    std::cout << vec0[0] << std::endl;
    

Anmelden zum Antworten