Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » 3-dimensionale dynamische arrays

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
24.03.2004, 18:52 Uhr
~gast
Gast


Hallo allerseits,

ich würde gern wissen, wie ich ein dreidimensionales Array erzeuge, welchen die Maße [h][ b ][3] hat. Dabei wird h und b jedoch erst im Laufe des Scriptes berechnet. Ich versuche gerade über Zeiger dies zu lösen, komme aber irgendwie nicht weiter.
Kann mir jemand helfen? - Danke schonmal im Vorraus.


Bearbeitung von loddab:
Leerzeichen in [ b ] eingefügt, da sonst als Boardcode interpretiert

Dieser Post wurde am 24.03.2004 um 18:57 Uhr von loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.03.2004, 19:18 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


in c oder in c++?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.03.2004, 19:27 Uhr
~gast
Gast


in c++ wenn es geht.
ich verwende zu Hause Visual C++ 6.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.03.2004, 19:39 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm dann kannst du entweder ein std::vector nehmen oder du nimmst die harte variante...


C++:
int i,j;
int x,y,z;
x=.....;
y=.....;
z=.....;

int ***my3darray;
my3darray=new int**[x];
for(j=0;j<x;++j){
   my3darray[j]=new int*[y];
   for(i=0;i<y;++i)
     my3darray[j][i]=new int[z];

}


speicher umgekehrt freigeben am ende wieder nicht vergessen
kannst auch einfach nur ein 1d-array allokieren und mit indices ein 3d-array simulieren (so würd ichs machen) wenn ich schon kein vector nehme ist aber ne geschmacksfrage....

wenn von vornherrein eine dimension schon fix ist. (wie in deinem fall die 3) sollte man überlegen das als erste dimension zu nehmen um eine allokierungsstufe zu sparen und da gleich ein constantes array zu wählen....
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 24.03.2004 um 19:40 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.03.2004, 20:15 Uhr
~Guest
Gast


Würd nen compaq assembler nehmen und dann nen c3 array dazupacken. Geht dann wie von selbst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.03.2004, 14:06 Uhr
RHBaum



performant und C++, faellt mir im moment nur std::vector ein ...
und die Indizies einfach auf 3 dimensionen umrechnen ....
also sowas wie :

C++:
template<class T>
class 3DArray
{
private:
typedef std::vector<T> Array_T;
public:
3DArray() { ...};
3DArray(size_t adimX,size_t adimY,size_t adimZ) { ...};
3DArray(const 3DArray & rx) { ...};
virtual ~3DArray();

size_t getDimX() const { ...};
size_t getDimY() const { ...};
size_t getDimZ() const { ...};

T& operator[](size_t adimX,size_t adimY,size_t adimZ) { ...};
const T& operator[](size_t adimX,size_t adimY,size_t adimZ)  const { ...};

private:
Array_T m_Array;
size_t m_dimX;
size_t m_dimY;
size_t m_dimZ;
};



Die implementation ueberlass ich mal deiner Phantasie ... so wuerde ich rangehen ....

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.03.2004, 14:08 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@RHBaum
bekommst du mit dem visual c++ 6 ein mehrdimensionales std::vector-array vernünftig zum laufen. bei mir hat das nie richtig geklappt... (also sowas wie std::vector<std::vector<double> > hat er gerade noch geschluckt.) ..

besonders nicht wenn das array aus einem struct bestand das selber wieder ein array von z.b. std::strings enhält...
da hat der complier bei mir nur noch gemotzt... gibts da nen trick den vc zu überzeugen das doch zu schlucken?
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 25.03.2004 um 14:10 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.03.2004, 14:09 Uhr
RHBaum



Bin mir im moment nicht sicher, ob der [] operator mit mehren Parametern geht ...
Notfalls durch ne meberfunktion ala T& Value(size_t adimX,size_t adimY,size_t adimZ) ersetzen ...

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.03.2004, 14:14 Uhr
RHBaum



@windalf

std::vector ist eindimensional ... wuesst nicht wie man das mehrdimensional bekommt.
Aber mit mitteln der Mathematik kann man jedes mehrdimensionale Array in ein eindimensionales umwandeln ... in dem man die Indizies umrechnet ...

Natuerlich wird dann eine erweiterung oder verkuezung des bereichs etwas .... sagen wir mal ... rechenintensiever ....

Alternativ dazu hilft immer noch die Array of Array methode .... :p

das sind die lookups auf die indizies ned ganz so schnell, dafuer geht aber das erweitern / verkuerzen einer dimension viel flotter ....

typedef std::vector<T> Dim1_T;
typedef std::vector<Dim1_T> Dim2_T;
typedef std::vector<Dim2_T> Dim3_T;

mag ich persoenlich aber nicht so besonders .... kommt auf den anwendungsfall an ...

Ciao ...

Dieser Post wurde am 25.03.2004 um 14:18 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
25.03.2004, 14:26 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

std::vector ist eindimensional ... wuesst nicht wie man das mehrdimensional bekommt.


ja grosser meister, ich meinte was anderes, hab mich wieder unglücklich ausgedrückt

probleme hatte ich beim vc mit sowas in der art...


C++:
typedef struct{std::vector<std::string> strarray; int wasweissich;}record;

std::vector<std::vector<record> > myarray;


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 25.03.2004 um 14:31 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: