Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.01.2004, 15:03

Mehrdimensionale dynamische Arrays

Hi!

Wie kann man dynamische mehrdimensionale Arrays erstellen?
Also bei eindimensionalen mach ich das so:

Quellcode

1
2
3
4
int* m_aiField;

int Size=5;
m_aiField=new int[Size];


wie bekomme ich das jetzt mehrdimensional hin?

Quellcode

1
2
3
4
5
6
7
int* m_aiField;

int SizeW=5;
int SizeH=15;
int SizeD=10;

m_aiField=new int[SizeW][SizeH][SizeD];


das funzt nicht...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

29.01.2004, 15:16

Mach's doch so:

Quellcode

1
2
3
4
5
6
7
int* m_aiField; 

int SizeW=5; 
int SizeH=15; 
int SizeD=10; 

m_aiField=new int[SizeW * SizeH * SizeD];


Musst Dir nachher nur eine Funktion schreiben, die 3 Index-Zahlen in einen einzelnen Index umwandelt. Bei 2D könnte das z.B. so aussehen:

Quellcode

1
2
3
4
int GetIndex(int x, int y, int SizeW)
{
    return x + (y * SizeW);
}

3

29.01.2004, 15:18

Jo, hab ich mir auch schon geadacht.
Danke!

Aber gibt es wirklich keine Möglichkeit das wie bei dem eindimensionalen dynamischen Array zu machen?

4

29.01.2004, 16:09

ich hab zwar ka, ob das funzt, aber vielleicht gehts ja :D

Quellcode

1
2
3
4
int ***test = (int ***)(new int[Size1 * Size2 * Size3]);
test[2][3][4] = 5;

delete[] (int *)test;


sieht aber irgendwie nicht schön aus :(
ansonsten gibts noch die möglichkeit, inner schleife zu allozieren, allerdings hab ich grad vergessen, wie man das macht (lol).

cya, neonew
stay tight, project universe comes back!
### project earth <> 2004 ###

Master_Max

Frischling

Beiträge: 9

Wohnort: München

Beruf: Schüler

  • Private Nachricht senden

5

29.01.2004, 16:22

Guten Tag.

Oder mit einem std::vector?

MfG Max
It´s time to change.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

29.01.2004, 16:26

@neonew:
Nein, das kann garnicht gehen - woher soll denn der Compiler wissen, wie "breit" und "hoch" Du das Array gerne hättest? Das muss er nämlich wissen, um den Zugriff auf diese Weise zu erlauben.

Ein 2D-Array ist im Prinzip auch nur ein Array aus mehreren Arrays.
Ein 3D-Array ist ein Array aus Arrays aus Arrays. ;)

So ginge es auch:

Quellcode

1
2
3
4
5
6
7
8
9
10
int*** pppData;
pppData = new int**[SIZE_X];
for(int i = 0; i < 100; i++)
{
    pppData[i] = new int*[SIZE_Y];
    for(int j = 0; j < 100; j++)
    {
        pppData[i][j] = new int[SIZE_Z];
    }
}


Ist zwar umständlich, aber immerhin müsstest Du nachher folgendes tun können:

Quellcode

1
pppData[10][20][30] = 1000;

7

29.01.2004, 16:30

Das ist gut! Danke!!!
Hast mir echt geholfen!

8

29.01.2004, 16:33

@david: lol, stimmt :D

so hab ich das in etwa gemeint mit den schleifen.
aber sollte nicht eigentlich in der for-anweisung statt "<100" "<SIZE_X" stehen? sonst wird ja evtl viel zu viel alloziert :)

cya, neonew
stay tight, project universe comes back!
### project earth <> 2004 ###

9

30.01.2004, 17:46

Hi,
die STL bietet hiner etwas Hilfe,
man kann z.B. verschachtelte Container nehmen mit variablen Längen
wie

Quellcode

1
2
using std;
vector< vector< vector< int > > >  myContainer; 
die Längen sind noch unbestimmt!
nofi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

30.01.2004, 20:41

Allerdings müsstest Du dann auch per Schleife alle durchgehen mit mit "reserve" initialisieren. Ich denke mal, dass meine Methode schneller ist.

Werbeanzeige