int**** array anstatt int array [a][b][c][d]
-
Ich habe das mal wie folgt inizialisiert
int**** pointer = new int***[192]; for (int a=0; a<192;a++) { pointer[a]*** = new int**[256]; for (int b=0; b<256; b++) { pointer[a][b]** = new int*[24]; for (int c=0; c<24; c++) { pointer[a][b][c]* =new int[10]; for (int d=0; d<10; d++) { pointer[a][b][c][d]=-1; } } } }Dich leider sagt er jetzt immer einen Syntaxfehler in den folgenden Zeilen
pointer[a]*** = new int**[256];
pointer[a][b]** = new int*[24];
pointer[a][b][c]* =new int[10];Eigentlich wäre es schön wenn alle 4 "Dimensionen" dynamisch wären, aber zu Testzwecken reicht es momentan auch Fest. Es geht um Pixelkoordinaten in einem 3d Bild mit Parametern zu versehen.
-
Du hast Dereferenzierungen nicht verstanden.
int ****v; // Typ: int**** *v; // Typ: int*** **v; // Typ: int** ***v; // Typ: int* ****v; // Typ: intAber bitte lies meinen Beitrag von oben. Und erzähl uns mal etwas mehr. Attribute über ein 3D Bild?
-
cooky451 schrieb:
std::vector<std::array<std::array<std::array<int, 50>, 25>, 25>>
Und wer garantiert dir da, dass das hintereinander im Speicher liegt?
-
lazycoder schrieb:

Und wer garantiert dir da, dass das hintereinander im Speicher liegt?Es ist nicht garantiert, aber recht wahrscheinlich. Und da es um Performance und nicht um Fehler geht, kann man das problemlos machen denke ich.
-
lazycoder schrieb:
cooky451 schrieb:
std::vector<std::array<std::array<std::array<int, 50>, 25>, 25>>
Und wer garantiert dir da, dass das hintereinander im Speicher liegt?Äh...der Standard. std::array hat alles lokal und std::vector alles direkt hintereinander im Speicher.
Trotzdem lasse ich mal einen Link zu Boost.Multi-Array hier.
-
seldon schrieb:
Äh...der Standard. std::array hat alles lokal und std::vector alles direkt hintereinander im Speicher.
std::array darf hinter den Daten aber so viel stehen haben wie es will. Wie oben gesagt: Wahrscheinlich, aber meines Wissens nach nicht garantiert.
-
cooky451 schrieb:
Und da es um Performance und nicht um Fehler geht, kann man das problemlos machen denke ich.
Hat er nie gesagt. Außerdem ist er Programmieranfänger, kann das also nicht einschätzen.
Noch einmal zum Mitschreiben: Was du suchst, ist
vector. Das ist das eindimensionale dynamische Array in C++. Damit lässt sich leicht ein vierdimensionales bauen, wie schon hinreichend beschrieben.
Ob das in der Größe veränderbar ist, kann dir solange egal sein, bis du das Konzept gut verstanden hast. Mit Zeigergefrickel würde das länger dauern.
-
TyRoXx schrieb:
Hat er nie gesagt. Außerdem ist er Programmieranfänger, kann das also nicht einschätzen.
lol, die Aussage dass es performanter ist alles am Stück zu haben kommt doch von mir, der TE hat diese Forderung nie aufgestellt.
-
lazycoder schrieb:
cooky451 schrieb:
std::vector<std::array<std::array<std::array<int, 50>, 25>, 25>>
Und wer garantiert dir da, dass das hintereinander im Speicher liegt?Das verstehe ich nicht. [] ist doch ein überladener Operator. Wenn std::array das intern nicht richtig machte, wäre das ja fatal, dann könnte ja genausogut
std::array<int,5> ar; ar[4]=4; // Ist an der Stelle auch wirklich das 5te Element...schiefgehen. Oder verstehe ich da gerade etwas falsch, falls ja, klär mich bitte auf.
-
Edit: -
-
Hey ich bin es nochmal,
also es geht in erster Linie nicht um performance.
-
Wo ist dein Problem? Hast du die Beiträge gelesen?
-
Ja ich habe die Beiträge gelesen, und habe es mal mit den verschiedenen vorgeschlagenen Ansätzen versucht, erstes Problem auf das ich gestoßen bin
#include <array>produziert fehler. Somit kann ich auch den Ansatz mit dem Vektor der mehrere Array enthält nicht testen (ich glaube der war von dir cooky).
Deswegen habe ich jetzt 4 "verschachtelte" Vektoren genutzt. Dies funktioiertstd::vector<int> pHelpV1 (192,0); std::vector< std::vector<int> > pHelpV2 (256, pHelpV1); std::vector< std::vector< std::vector<int> > >pHelpV3 (24, pHelpV2); std::vector< std::vector< std::vector< std::vector<int> > > >pMeshPointMap (10, pHelpV3);So etwas ähnliches hatte ich hier gefunden.
-
maddy87 schrieb:
produziert fehler.
Welchen Compiler / Version nutzt du?
Das mit den geschachteteln Vektoren ist kein Problem, ist halt nur nicht so flott.
-
Dann eben std::tr1::array aus <tr1/array>. Oder so.