2d Array per default konstruktor
-
Hi leute,
Ich hatte ferien und hab ne weile lang nix gemacht. Auf jedenfall will mich jetzt wieder reinarbeiten.
Ich hab nen kleines Problem mit einen Default konstruktor für ein 2d Array
struct field{ char map_[20][20]; field() : map_({' '}) {} };Der konstruktor soll also das 2d Array komplett leeren damit da nich irgendwelche sonderbaren dinge die noch im speicher sind angezeigt werden.
Kann mir jemand helfen?

-
Ich würde ein 1D-Array bzw. -Container nehmen, und Indizes umrechnen. Macht vieles einfacher als ein 2D-Array. Ausserdem ist
std::arrayoderstd::vector(bei dynamischer Grösse) empfehlenswert. Ersteres hat auch eine Methodefill(), mit der du sämtliche Elemente initialisieren kannst. Ansonsten gibts noch die freie Funktionstd::fill().struct field { std::array<char, 20*20> map_; field() // : map_() // <- kannst du uninitialisiert lassen { map_.fill(' '); } };
-
C++11 benutzen, da geht das. Ohne C++11 leider nicht, da müsstest du tatsächlich Code in den Konstruktor packen.
-
SeppJ schrieb:
C++11 benutzen, da geht das.
Aber er müsste eine Initializer-List mit 400 gleichen Elementen aufschreiben. Nicht so ganz das Wahre.
Ist schon okay, wenn das Array im Konstruktorrumpf initialisiert wird. Bei
std::vectorkönnte man allerdings direkt den Konstruktor verwenden.
-
SeppJ, dass der initializer
()die Skalare und Arrays von Skalaren nullt, ist schon seit C++98 so.Aber er müsste eine Initializer-List mit 400 gleichen Elementen aufschreiben. Nicht so ganz das Wahre.
Gehts noch!

-
' '
-
Danke für die antworten.
Wie funktioniert das mit den indizies genau?
-
Statt
array[y][x]hast du z.B.array[y*breite + x], wobeibreitedie Anzahl der Spalten ist.
-
danke
wie kann ich dan einzelen punkte ansprechen?
Eidt: Hab den code rausgenommen und nem neuen thread dafür auf zu machen ..-