Ich habe eine Simulation auf einem 3D-Ising Gittern von Einsen und Minusfehler auf einem 3D es vertreten zu implementieren wäre sehr nützlich, wenn die Größe zur Laufzeit bestimmt werden kann (für mehr Flexibilität). Da es viele Zugriffe auf die Einträge der Speicherzuordnung so lokal wie möglich sein sollte. Wenn etwas gefunden, für einen 2D-Array: Copy 2D array using memcpy?:cpp 3d dinamic Erstellung von 3D-Arrays von einem einzigen Speicher, der aus Block
GridUnit** newGrid;
newGrid = new GridUnit*[width];
newGrid[0] = new GridUnit[width * height];
for (int i = 1; i < width; i++)
newGrid[i] = newGrid[i-1] + height;
Ausplanung wird einfacher:
delete[] newGrid[0];
delete[] newGrid;
und meine Bewertung ist zu niedrig, um den Beitrag zu kommentieren oder zu beantworten. Ich habe im Grunde zwei Fragen über den Code: 1.warum ist das Gitter als Zeiger auf Arrays von length = width
definiert und die Iteration findet statt über einen Index bis zur Breite Verschiebung der Adresse nach Höhe? verkompliziert das nicht den Zeilen- und Spaltenindex? 2. Soll ich dann eine Reihe von length=width
mit Zeigern auf Arrays von length=height*depth
erklären, die in dem folgenden Code führen würden:
int*** new3dGrid(int width, int height, int depth){
int*** newGrid;
newGrid = new int**[height*depth];
newGrid[0][0] = new int[width * height * depth];
for (int i = 1; i < width; i++){
newGrid[i] = newGrid[i-1] + height*depth;
for (int j=1;j<height;j++){
newGrid[i][j]=newGrid[i][j-1]+depth;
}
}
return newGrid;
}
Der 3-D-Fall ist in meiner Antwort hier enthalten: https://StackOverflow.com/a/29582795/103167 –