die dynamische Zuordnung von Zeilen aus 2D-array in c++
In c++ habe, kann ich ein 2D array mit fester Anzahl von Spalten, sagen wir 5, wie folgt:
char (*c)[5];
dann kann ich den Speicher für die Zeilen wie folgt
c = new char[n][5];
wobei n kann eine beliebige variable, die zugeordnet werden können den Wert auch zur Laufzeit. Ich würde gerne wissen, ob und wie kann ich dynamisch reservieren variable Speichergröße für jede Zeile, die mit dieser Methode. d.h. ich möchte die erste Aussage als solche, aber ändern können die zweite Aussage.
- Willkommen zu C++! Bitte werfen Sie Ihre C-Kenntnisse und genießen in
std::vector
undstd::array
! Wenn Sie es vorziehen,boost::multi_array
ist auch eine option! - Sie sagte C++, aber Sie in der Regel tun Sachen wie diese in C und nicht C++. Hier ist ein netter link, der erklärt, wie Sie dynamische arrays mit malloc.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt einen Zeiger auf ein array, du wärst ein Zeiger auf einen Zeiger, gefüllt mit einem array von Zeigern jedes element ist wiederum gefüllt mit einem array von chars:
Etwas mehr C++ - Datenstruktur wäre eine
std::vector<std::string>
.Als Sie bemerkt im Kommentar, dynamische arrays zugewiesen mit
new[]
kann nicht geändert werden, da es keine Analogrealloc
in C++ (es ist nicht sinnvoll, mit dem Objekt-Modell, wenn Sie es denken). Daher sollte man immer lieber einen richtigen Behälter über keine manuellen Versuch der dynamische lifetime-management.In der Zusammenfassung: nicht verwenden
new
. Je. Verwenden Sie geeignete dynamische Container.std::vector<std::array<char, 5>>
. Dynamische arrays zugewiesen mitnew[]
kann nicht geändert werden; es gibt keinerealloc
-Analog in C++.&& post.looks_correct()
Müssen Sie erklären c wie folgt:
char** c
; dann, reservieren Sie die große Auswahl wie folgt:c = new char*[n]
; und dann, weisen jeweils kleinere array wie folgt:c[i] = new char[m]