dyn 2 dimensionales int array??
-
Ähm, das wichtigtste Array, nämlich des, was zu C++ dazugehört und auf jedem System ohne Lib verfügbar ist, hast du vergessen.
@Shade: grrrr, nächstes mal fress ich dich auf.
-
ok sorry
-
ich würd das gern ohne Libs machen, für ein 1 dimensionales Array geht das ja leicht, aber 2 Dimensionen?
typedef int *PFeld;
PFeld p;
int anzahl;cin<<n;
p=new int[n]; //n Felder großes 1 Dimesionen Array
//geht auch mit malloc...delete p[]; //und weg is es
-
-
danke, das is genau,das was is gesucht habe:
aber etwas versteh is nicht? [] Operator überladen? was soll das machen??
class Simple2DimArr { private: int* pArr; int Rows, Cols; public: Simple2DimArr(int Zeilen, int Spalten) { Rows = Zeilen; Cols = Spalten; // 2-Dimensionales Array auf 1-Dimensionales abbilden pArr = new int[Rows * Cols]; } int* operator[](int Zeile)//<-- wuste nicht das man den [] Operator überladen kann //kann mir das wer mal erklären { // Array liegt "zeilenweise" im Speicher return & pArr[Zeile * Cols]; } ~Simple2DimArr() { delete [] pArr; } }; int main() { Simple2DimArr Arr(2,3); Arr[0][0] = 42; }
Und noch so eine frage nebenbei, wie liegt ein 2D Array im speicher????ß
-
Hi!
Ein 2D-Array liegt so im Speicher (Beispiel mit einem a[6][8] Array):
a[0][0], a[0][1], ..., a[0][6], a[0][7], a[1][0], a[1][1], ...Du kannst also wie folgt umrechnen auf einen Index:
a[xANZAHL_ELEMENTE_INDEX2+y];
bei 2 Indizes:
a[x][y];
Bei dem oben also, wenn du auf das 2. Element im 1. Feld zugreifen willst:
a[08+1];
entspricht:
a[0][1];EDIT:
Die größe von 2. Index lässt sich so ermitteln:sizeof(*a); // sollte 8 zurückgeben.
Das könntest du einer Variablen übergeben und dann kannst du alles auf einen Index umrechnen.
Code-Hacker
-
Du machst deinem Namen alle Ehre.
Ne, im Ernst: Was spricht denn gegen verschachtelte vectoren?
-
ich find vectorkoordinaten wie arr[5][3][2] eigentlich sehr übersichtlich, man kann sich das immer so schön 3 dimensional vorstellen...5 auf der x achse,3 auf der y Achse,2 auf der z Achse.
-
vector< vector< vector < int > > > vec;
vec[3][2][1] = 5;
ich dachte bis eben eigentlich, dass das gehen würde
-
SirLant schrieb:
ich dachte bis eben eigentlich, dass das gehen würde
Nur wenn du für jede Dimension ein resize() aufrufst :p