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;