dyn 2 dimensionales int array??
-
Also ich möchste folegendes machen:
eine Klasse die ein 2dimensionales array beliebiger größe beinhaltet.Der Konstruktor der Klasse soll die länge und breite des Arrays als Parameter haben.
Ich habe versucht im Konstruktor der Klasse ein Array zu definieren und je nach dem was in den Parametern steht habe ich speicherplatz freigeggben.
HJetzt weis ich nicht weiter.Wie würdet ihr soetwas machen?
-
Schau mal in die FAQ
-
Schau dir mal CArray, CPtrArray und CTypedPtrArray an, um eine Übersicht über die Möglichkeiten für ein dynamisches Array zu bekommen.
http://msdn.microsoft.com
-
Frauke2k schrieb:
Schau dir mal CArray, CPtrArray und CTypedPtrArray an, um eine Übersicht über die Möglichkeiten für ein dynamisches Array zu bekommen.
http://msdn.microsoft.comDie MFC ist dafür wohl gänzlich ungeeignet.
Schau dir lieber vector, list & Co an. bzw boost::shared_ptr für Pointer in einem Container.
-
Ä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