array beliebiger dimension dynamisch anlegen...
-
Braunstein schrieb:
Hallo,
Wie wärs denn mit boost::multi_array
Das duerfte auch nix bringen weil der Templateparameter schon zur Compile-Zeit feststehen muss.
-
Hem, weiß jetz nicht genau wo das Problem sein soll. Man muß schon etwas basteln, aber das ist schnell gemacht.
int zeilen = 5; std::vector<std::vector<int>> felder(zeilen); int spalten = 10; for(int i=0; i < felder.size(); i++) felder.at(i).resize(spalten); // Zugriff auf Zeile 2 und Spalte 8: felder.at(1).at(7);Oder meinstest du was anderes? Wenn man das noch schön in einer andere Klasse verpackt, kan man das komfortabler machen.
-
Z2 schrieb:
stl schrieb:
mit std::vector sollte es doch gehen, dass man die einfach beliebig ineinander schachtelt.
Nicht, wenn die Tiefe der Verschachtelung erst zur Laufzeit feststeht.
Also der Sinn eines Vectors ist es, das man erst zur Lauftzeit die Größen setzt. Sonst wäre der Vector witzlos.
-
Artchi schrieb:
Hem, weiß jetz nicht genau wo das Problem sein soll. Man muß schon etwas basteln, aber das ist schnell gemacht.
Und was machst du, wenn du zur Laufzeit feststellst, dass du drei Dimensionen brauchst?
-
OK, die Dimensionsanzahl ist schon schwieriger. Stimmt.
-
Artchi schrieb:
Z2 schrieb:
stl schrieb:
mit std::vector sollte es doch gehen, dass man die einfach beliebig ineinander schachtelt.
Nicht, wenn die Tiefe der Verschachtelung erst zur Laufzeit feststeht.
Also der Sinn eines Vectors ist es, das man erst zur Lauftzeit die Größen setzt. Sonst wäre der Vector witzlos.
Die Größe ja, aber (leider) nicht die Schachtelungstiefe - ein vector ist nunmal eine eindimensionale Datensammlung (und auch wenn du vector<vector<...> > schreibst, mußt du zur Compilezeit wissen, wieviele Dimensionen du verwalten willst - wie groß die jeweils werden, kannst du später definieren).
-
Artchi schrieb:
Z2 schrieb:
stl schrieb:
mit std::vector sollte es doch gehen, dass man die einfach beliebig ineinander schachtelt.
Nicht, wenn die Tiefe der Verschachtelung erst zur Laufzeit feststeht.
Also der Sinn eines Vectors ist es, das man erst zur Lauftzeit die Größen setzt. Sonst wäre der Vector witzlos.
Wir reden hier nicht von der Größe, sondern von der Tiefe der Verschachtelung:
std::vector<irgendwas>
oder
std::vector<std::vector<irgendwas> >
usw.
-
Ja, sorry, weiß ich jetzt mittlerweile!

-
Die einzige Frage die sich mir jetzt stellt: wie will man zur Laufzeit dann beliebige Dimensionsanzahlfälle behandeln? Ich muß ja irgendwo eine Syntax haben, die auf die Dimensionen zugreift. Genauso müsste ich das Problem auch mit dem Definieren der Dimensionen angehen.
Lösen lässt sich das Problem ja...
-
Artchi schrieb:
Ich muß ja irgendwo eine Syntax haben, die auf die Dimensionen zugreift. Genauso müsste ich das Problem auch mit dem Definieren der Dimensionen angehen.
Das Problem liese sich vermutlich lösen, indem man die Indizes (und Dimensionsgrößen) auch als Vector übergibt.
PS: Eventuell wären auch val_array und (g)slice's ein Ansatz, um so ein mehrdimensionales Array zu bauen.
-
CStoll schrieb:
Das Problem liese sich vermutlich lösen, indem man die Indizes (und Dimensionsgrößen) auch als Vector übergibt.
jepp, genau das mach ich auch gerade
