Neuer Versuch: Zweidimensionaler Vector
-
Im alten Thread wird mir wohl garantiert niemand helfen, außerdem konnte ich das Problem eingrenzen. Bitte den alten Thread schließen, danke!
#include <iostream> #include <vector> using namespace std; int main() { vector<vector< int > > test; test.resize(199); cout<<test[13][34]<<endl; return(0); }
1.) Bei resize() steht nicht 0 drinne wie bei einem eindimensionalen vector.
2.)
vector<vector< int > > test;
geht,
vector<vector<int>>test;
nicht, warum?
3.) Heißt das nun, alle Methoden gelten nur für einen eindimensionalen Vector?
Per "hand" löschen geht auch nicht:
#include <iostream> #include <vector> using namespace std; int main() { vector<vector< int > > test; test.resize(35); for(int i=0; i<35; ++i) for(int k=0; k<35; ++k) test[i][k] = 0; cout<<test[13][34]<<endl; return(0); }
Gibt ein Debug Assertion failed. Wie arbeite ich richtig damit?
-
Vecci schrieb:
2.)
vector<vector< int > > test;
geht,
vector<vector<int>>test;
nicht, warum?
Siehe: http://www.c-plusplus.net/forum/viewtopic.php?t=82187&highlight=maximal+munch
vector<vector< int > > test;
test ist bisher ein leerer vector von leeren int-vectoren.
test.resize(35);
Jetzt ist test ein vector mit 35 *leeren* int-vectoren.
for(int i=0; i<35; ++i) for(int k=0; k<35; ++k) test[i][k] = 0;
Hier greifst du auf das k-te Element des i-ten *leeren* int-vectors zu. Das kann nicht gehen, da der i-te vector derzeit keinerlei Elemente aufnehmen kann. Du schreibst also in Speicher, der dir nicht gehört.
Lösung:
A) Du gibst jedem int-Vektor eine feste Größe:vector<vector< int > > test; test.resize(35); for (int i = 0; i < 35; ++i) test[i].resize(35); // OK for(int i=0; i<35; ++i) for(int k=0; k<35; ++k) test[i][k] = 0;
Jetzt hast du einen vector von 35 int-vectoren, die jeweils 35 ints aufnehmen können.
Du verwendest eine Methode wie push_back anstatt des op[].
vector<vector< int > > test; test.resize(35); for(int i=0; i<35; ++i) for(int k=0; k<35; ++k) test[i].push_back(0);
Das push_back resized den vector automatisch, falls dies nötig ist.
Aber warum schaust du nicht einfach mal in unsere FAQ:
http://www.c-plusplus.net/forum/viewtopic.php?t=39489