2017-08-19 21 views
-3

Ich finde es möglich, Arrays dynamisch in C++ zu initialisieren. Durch diese ich meine:Vektoren vs Dynamische Arrays

int n; 
int ar[n]; 

funktioniert gut.

Also was ist der Unterschied zwischen diesem und Vektoren?

+2

Versuchen mit '-Wall -pedantic' und der Unterschied sein sollte klar :) – Rakete1111

+4

C nicht Standard sind Arrays mit variabler Länge zu kompilieren ++ sondern erscheinen als eine Erweiterung von Ihrem Compiler unterstützt werden. –

+1

Arrays mit variabler Länge gehören nicht zum Standard C++. Einige Compiler unterstützen sie als Erweiterung der Sprache, verlassen sich aber nicht darauf. –

Antwort

0

Die eine ist, dass VLA (int arr[n] und mit n etwas anderes ist als ein constexpr zu sein, ist ein variabler Länge Array) nicht durch Standard-C++ unterstützt. Auch wenn einige Compiler es akzeptieren, ist es zumindest nicht portierbar.

Die andere Sache ist, dass eine vector Größe dynamisch anpassen kann, d. H. Es "steigt" bei Bedarf, und Sie können es schrumpfen lassen. Dies ist mit einem VLA nicht möglich, da es - einmal für einen bestimmten n definiert - Speicher nach n Elementen zuweist und danach nicht mehr wachsen oder schrumpfen kann.

Ferner VLAs in ihrer typischen Anwendung hat eine gute Chance auf dem Stapel zugeordnet werden, was eine ziemlich begrenzte Größe hat im Vergleich zu dem Heap. Vektoren weisen Speicher auf dem Heap zu, so dass sie normalerweise viel größer werden können. Mit VLAs könnten Sie also Probleme mit dem Speicher für n s haben, wo Sie mit Vektoren kein Problem hätten. Versuchen Sie zum Beispiel int n=100000; int arr[n]; arr[100]=0 und sehen Sie, was passiert.

+0

Ich glaube nicht, dass die meisten modernen Desktops ein Problem bei der Zuweisung von 100000 Ints auf dem Stack haben werden. Einige könnten sogar eine Million bewältigen, obwohl die meisten an 10 Millionen ersticken würden. –