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

Phili

unregistriert

1

06.07.2006, 14:31

new mehrdimensional?

Mal ne Frage, die die meisten von euch wohl sofort beantworten können:

ich kann sagen :

C-/C++-Quelltext

1
2
3
int i=5;
int *a;
a=new int[i];


Aber wie geht das bei mehr Dimensionen?
nicht:

C-/C++-Quelltext

1
2
3
int i=5;
int *a;
a=new int[i][i];

nicht:

C-/C++-Quelltext

1
2
3
int i=5;
int **a;
a=new int[i][i];

nicht:

C-/C++-Quelltext

1
2
3
4
5
int i=5;
int **a;
*a=new int[i];
for(int j=0; j<10; j++)
a[j]=new int[i];


Wie dann?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

06.07.2006, 14:42

C-/C++-Quelltext

1
2
int i = 30*32; // 30 mal 32 Matrix

int *a = new[i];


Zugriff:

C-/C++-Quelltext

1
2
3
for(int y = 0; y < 30; y++)
  for(int x = 0; x < 31; x++)
    a[y*max_x + x] = y;

Phili

unregistriert

3

06.07.2006, 14:44

@koschka
Anders gehts nciht? kann ich mir nicht vorstellen

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

4

06.07.2006, 14:48

ist das einfachste und effektivste. Es geht auch noch mit Doppelpointer u.s.w. aber viele kommen da schnell durcheinander, weil se nicht mal mit nur einem * klarkommen.

weitere:
https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=4114&highlight=new

Phili

unregistriert

5

06.07.2006, 14:52

Geht anders(habs selbst rausgefunden):

C-/C++-Quelltext

1
2
3
4
5
int i=5;
int **a;
a=new int*[i];
for(int j=0; j<10; j++)
a[j]=new int[i];

Danke trotzdem... :D

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

06.07.2006, 14:55

Ja müsste gehen -.- aber

spätestens wenn es 3 und mehrdimensional wird, wirst du Probleme haben. Da noch durchzublicken ist schrecklich, nach der Methode oben allerdings sehr einfach ;).

BTW. du musst mehrere deletes machen, ich hoffe du weisst das und das kostet ne Menge ZEIT, die man mit einer simplen multiplikation eingespart hat ;) => oben viel besser ;)

Anonymous

unregistriert

7

06.07.2006, 15:56

Mal was von mir:
http://www.online-tutorials.net/faq/c++-wie-erstellt-man-ein-dynamisches-mehrdimensionales-array/tutorials-t-47-92.html

Es kommt aber wie schon gesagt auf den Verwendungsort an, das ist das Entscheidende. Man kann nicht sagen "Array ist immer das Beste" oder "Listen sind immer das Beste".

Also währe ggf. noch Hilfreich den Verwendungsort zu wissen :roll:

Phili

unregistriert

8

06.07.2006, 16:08

@nix da
Ich brauchs, um ne Karte zu Speichern-ich denk malne Liste wär da unsinnig.
Ich brauch das ganze für ein Rennspiel, bei dem ich halt karten mit varibler Größe machen will...

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

9

06.07.2006, 16:21

dann sollte koschka´s Variante doch ganz passend sein, bevor du anfängst, ins Mehrdimensionale zu gehen.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

10

06.07.2006, 20:24

@Patrick,
ich find das "anhängen" einer Dimension einfach nur unnötig. Ich hab dann einen Zeiger desses Inahlt wieder auf einen zeigt u.s.w. klar können das heutige CISC Rechner sehr schnell, aber ein Zeiger auf einen Wert ist für den Programmierer an sich übersichtlicher, und man muss nicht so aufpassen das man ja alles allociert und wieder löscht.

Listen wären auch hier sicherlich interessant, man kann ja y Elemente der Liste mit einem Tupel aus x Objekten nehmen, was aber irgendwie wieder das gleiche wäre

Werbeanzeige