Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Multidimensionales dynamisches Array mit Vektoren

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 <
000
19.09.2009, 16:56 Uhr
~yodakohl
Gast


Hallo.

Ich benötige ein 3 Dimensionales Array mit float Werten. Dabei steht die Größe des Arrays erst zur Laufzeit fest.


Das ganze wollte ich über geschachtelte Vektoren realisieren:


C++:
std::vector<std::vector<std::vector<float> > > b_faktor;



und dann über eine resize Funktion zur Laufzeit auf die richtige Größe bringen

C++:
             b_faktor.resize(x);      
             for (int i = 0; i < x; i++){
                     b_faktor[i].resize(y);
                     for(int j= 0;j<y;j++){
                          b_faktor[i][j].resize(y);
                    }
             }




Bei einem 2d Array hat das ganze noch funktioniert, beim 3d Array wird anscheinend noch die erste Dimension auf die richtige Größe gebracht dann zeigen sich Symptome einer Endlosschleife.

Bei meinem Test sollte ein 2x2x2 Array erstellt werden (x und y jeweils 2).

Sieht jemand einen Fehler im Konzept?
Gibt es eventuell eine bessere Möglichkeit ein 3d Array zur Laufzeit zu erstellen?

Vielen Dank für kommende Antworten


Bearbeitung von 0xdeadbeef:

cpp-Tags eingefügt, nächstes mal selbst machen.


Dieser Post wurde am 19.09.2009 um 17:24 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.09.2009, 17:33 Uhr
0xdeadbeef
Gott
(Operator)


Mit std::vector würd ich das wohl so machen:

C++:
  std::vector<std::vector<std::vector<float> > > v(x, std::vector<std::vector<float> >(y, std::vector<float>(y)));


bzw. der Lesbarkeit halber mit typedefs:

C++:
typedef std::vector<float> f_vec_t;
typedef std::vector<f_vec_t> f_vec_2d_t;
typedef std::vector<f_vec_2d_t> f_vec_3d_t;

f_vec_3d_t v(x, f_vec_2d_t(y, f_vec_t(y)));


Allerdings...wenn es sich um Rechteckarrays handelt und du die Größe der Arrays nachher nicht mehr ändern musst, würde ich eher Boost.MultiArray benutzen. Das sähe dann so aus:

C++:
#include <boost/multi_array.hpp>

// ...

boost::multi_array<float, 3> array(boost::extents[x][y][y]);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: