Wie Sie initialisiert ein array, dessen Größe zunächst unbekannt?
Sagen, dass ich diese:
int x;
int x = (State Determined By Program);
const char * pArray[(const int)x]; //??
Wie würde ich initialisieren pArray, bevor es zu benutzen?
Weil die anfängliche Größe des Array ist bestimmt durch Benutzereingaben
Dank!
Nach diese Antwort auf eine ähnliche Frage, Sie können nicht tun, was Sie zu tun versuchen. Warum nicht
Sie können entweder Vektor-oder dynamische array, obwohl Vektor ist bevorzugt. Finden Sie diese Antwort stackoverflow.com/a/1598409/1866301
std::vector
statt?Sie können entweder Vektor-oder dynamische array, obwohl Vektor ist bevorzugt. Finden Sie diese Antwort stackoverflow.com/a/1598409/1866301
InformationsquelleAutor moonbeamer2234 | 2014-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Sie nicht initialisieren eines Arrays zur compile-Zeit, wenn Sie bei der Bestimmung der Größe zur Laufzeit.
Aber je nachdem, was Sie versuchen zu tun, eine nicht-const-Zeiger auf const Daten bereitstellen kann, die Sie mit dem, was Sie für gehen.
Ein vollständigeres Beispiel:
Ich nicht einverstanden mit anderen, dass ein std::vector ist wohl mehr das, was Sie suchen. Wenn Sie wollen, dass es mehr Verhalten wie dein const-array, können Sie es auf eine const-Referenz.
InformationsquelleAutor Catskul
Größe von dynamisch erzeugten Arrays auf dem stack muss zur Kompilierzeit bekannt ist.
Können Sie entweder
new
:oder besser
std::vector
statt (keine Notwendigkeit zu tun, die Speicherverwaltung manuell):InformationsquelleAutor herohuyongtao
Das Beispiel, das Sie zur Verfügung gestellt Bemühungen um den Aufbau der Arrays auf dem stack.
Jedoch, Sie können nicht dynamisch erstellen von Objekten auf dem stack. Diese Arten von Elementen werden muss zur Kompilierzeit bekannt ist. Wenn diese variable basiert auf Benutzereingaben, dann müssen Sie erstellen Sie das array im heap-Speicher mit dem neue Stichwort.
Jedoch nicht alle Elemente müssen auf dem heap erstellt. Heap Allokation ist normalerweise viel langsamer als stack-Allokation. Wenn Sie möchten, um Ihr array auf dem stack-Sie können immer mit block-basierten Initialisierung.
Es sollte angemerkt werden, dass die zweite option ist verschwenderisch. Da kann man nicht dynamisch die Größe dieses array müssen Sie reservieren ein großes genug Stück zu halten, die maximale Anzahl der Gegenstände, die das Programm erstellen könnte.
Schließlich können Sie immer verwenden Datenstrukturen von C++. std::vector ist eine solche Klasse. Es bietet Ihnen eine gute Abstraktions-und Element gespeichert sind, im Kontingent Speicher wie ein array. Wie bereits durch eine der anderen Antworten, die Sie sollten die option "Größe anpassen" sobald Sie wissen, die endgültige Größe Ihres Vektors.
Der Grund dafür ist, jedes mal, wenn Sie ein element zu einem Vektor, wenn es nicht mehr genug Platz zum wachsen hat, es zu verschieben alle Elemente, so können Sie existieren nebeneinander. Mit der resize-Methode hilft zu verhindern, dass Vektor ab, zu wachsen, wie Sie Elemente hinzufügen.
InformationsquelleAutor Freddy