010
16.04.2005, 20:45 Uhr
~doppler
Gast
|
C++: |
vector<vector<vector<int> > > myvector;
|
bedeutet, dass myvector ein ein vector ist, bei dem jedes element ein vector<vector<int> > ist. Der Ausdruck myvector[i] liefert also einen vector<vector<int> > zurück.
Mit
C++: |
for(unsigned i=0; i < myvector_3D.size(); i++) myvector_3D[i].resize(8);
|
änderst du die Länge jedes dieser Elemente auf 8, d.h. die neuen Einträge sind <vector<vector<int> > der Länge 8. Die Elemente dieser Einträge sind aber immernoch vom Typ vector<int> und haben die Länge 0, daher führt das letzte [2] zu einem Speicherzugriffsfehler. (eigentlich schon das erste [5], da myvector_3D die Länge 3 hat, wegen der ersten Zeile
C++: |
vector< vector< vector<int> > > myvector_3D(3);
|
Mit resize() änderst du die Länge des Vektors. Wenn der Vektor vorher länger war, wird das Ende abgeschnitten, wenn er kürzer war, werden am Ende default-elemente eingefügt. In deinem Fall also vector<int>() (ein vector der Länge 0 aus ints).
Mit size() fragst du die Länge des vector ab.
push_back() fügt am Ende ein Element an, erhöht also die Länge des vector um 1. |