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

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

1

08.12.2009, 18:05

Dynamische Mehrdimensionale Arrays

Hallo,

Ich wollte fragen, welche methode ich zum erstellen von dynamischen mehrdimensionalen Arrays vom Datentyp einer Struktur verwenden sollte.

Habe (per Google) mal das hier gefunden:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-39489.html

Ich suche die Methode, die am schnellsten ist, d.h. wo die zugriffzeiten am kürzesten sind, und evtl. auch die Syntax nicht zu kompliziert ist.

Ich denke, dass

C-/C++-Quelltext

1
vector< vector<int> > My2DimArr(FirstDim);

am geschicktesten wäre...
Könnt ihr das bestätigen?

Vielen dank schon mal in voraus :)
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

2

08.12.2009, 18:09

Afaik bietet boost da was in die Richtung an
Boost Multi Array
Anstatt was eigenes zu schustern: Nimm lieber das, die wissen, was sie machen und machen es ausgesprochen gut!

Selber basteln würde ich solch grundlegende Dinge wirklich nur zu Übungszwecken.

Laguna

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

3

08.12.2009, 18:14

Ahh, danke ;)

Ich brauche zwar nur 2-Dimensionale Arrays, aber könnte man auch die anzahl der Dimensionen dynamisch machen, oder muss das ein const sein?
Ich meine:

C-/C++-Quelltext

1
2
int anzahl;
typedef boost::multi_array<double,anzahl> array_type;


mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

08.12.2009, 18:23

Schau doch in der Doku nach...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

08.12.2009, 18:25

Was genau willst du denn mit dem 2D Array machen? Weil oft reicht schon ein 1D Array aus. Ist nur eine Frage aus reinem interesse.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

6

08.12.2009, 18:26

Da es sich dabei um einen Templateparameter handelt, nein.

Die Templateparameter werden zur Compilezeit interpretiert (intancing), was es unmöglich macht, selbige zur Laufzeit festzulegen.

Wenn es dir darum geht, die Anzahl der Einträge dynamisch zu erzeugen, kannst du dir mal boost::tupel anschauen

So Far...

Laguna

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

7

08.12.2009, 18:32

Zitat von »"Nox"«

Was genau willst du denn mit dem 2D Array machen? Weil oft reicht schon ein 1D Array aus. Ist nur eine Frage aus reinem interesse.

Ich fande es einfacher, damit ein Spielfeld zu repräsentieren... natürlich ginge es auch mit einem 1D, aber das würde den Code sehr unübersichtlich machen ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

08.12.2009, 18:45

Zitat von »"CBenni::O"«

Ich fande es einfacher, damit ein Spielfeld zu repräsentieren... natürlich ginge es auch mit einem 1D, aber das würde den Code sehr unübersichtlich machen ;)


Nicht wenn du das gescheit in einer Klasse kapselst. Die Variante mit dem 1D array wird sicherlich auch die effizienteste sein. Boost::MultiArray macht das intern vermutlich auch so.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

08.12.2009, 18:53

Gerade für ein Spielfeld ist ein 1D vollkommen ausreichend. Ist sogar ziemlich einfach:

Quellcode

1
2
3
4
5
int x,y;
array[x * width + y];
oder wenn man einen index hat->
x = index % width;
y = index /width;
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

10

08.12.2009, 18:59

Von daher, doch einen 1D-Vector?

Danke für eure Antworten :)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Werbeanzeige