Forum: PC-Programmierung C++: vector vs array


von cpp (Gast)


Lesenswert?

Hallo zusammen,

worin unterscheiden sich Vektoren und Arrays in C++ voneinander? Was 
sind die Vorteile von Vektoren gegenüber Arrays?

Die Schreibweise von Arrays finde ich um einiges klarer als die von 
Vektoren, z.B.:

int A[2][3];
vector<vector<int>> A;

Grüße
cpp

von Dr. Sommer (Gast)


Lesenswert?


von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Ein Vektor ist ein Container, der sich grob selbst verwalten kann, was 
die Groesse angeht. Ein Array wird angelegt und hat eine feste groesse. 
In einem Vektor hast du aber dynamische Speicherverwaltung.

Beispiel:
Du legst einen Vektor mit 6 Elementen an. Sind die 6 Elemente belegt, 
wird neuer Speicher angefordet. Der Speicher wird verdoppelt, so dass 
der Vektor jetzt 12 Elemente fassen kann. Entnimmst du dem Vektor 
Elemente, wird wieder Speicher freigegeben, und zwar wenn der Vektor nur 
noch ein viertel belegt ist, wird der Speicher um die haelfte 
verkleinert.

Start:
Vektor der groesse 6. Es werden 6 Elemente in den Vektor gepakt.
Vektor vergroesserung auf Groesse 12.
Element entnahme, bis nur noch 3 Elemente im Vektor sind.
Vektor verkleinerung von 12 auf 6.

Du musst dir also keine Gedanken darueber machen, wie viele Elemente du 
Speichern willst. Bei einem Array, egal ob statisch oder dynamisch, 
musst du aber wissen wie viele Elemente es haben soll.

Ein Array kannst du halt nicht vergroessern oder verkleinern. Wenn du 
das machen willst musst du Speicher anfordern, den Inhalt des alten 
Arrays ins neue Array kopieren, das alte Array freigeben.

von N. G. (newgeneration) Benutzerseite


Lesenswert?

Hallo cpp,

cpp schrieb:
> worin unterscheiden sich Vektoren und Arrays in C++ voneinander?

Offensichtlich hast du dich noch nicht sonderlich tief mit der Materie 
beschäftigt. Arrays haben eine feste Größe und belegen immer den 
Speicherplatz.
Ein vector hingegen hat eine dynamische Größe, je nach dem wie viel du 
in den vector hineinschreibst ändert er seine Größe. Damit belegt er nur 
so viel Speicher, wie für die Elemente gebraucht wird (+ etwas in 
reserve, damit nicht bei jedem push_back() neuer Speicher alloziert 
werden muss).

cpp schrieb:
> Was sind die Vorteile von Vektoren gegenüber Arrays?
Diese sollten aus dem oben genannten eigentlich hervorgehen. Sonst 
einfach mal google oder cppreference befragen (siehe Link von Dr. 
Sommer).

cpp schrieb:
> Die Schreibweise von Arrays finde ich um einiges klarer als die von
> Vektoren, z.B.:
>
> int A[2][3];
> vector<vector<int>> A;
Jetzt vergleichst du aber die "C-style" Arrays mit den "c++-style" 
vector.
Ein fairer Vergleich wäre std::array<> vs. std::vector<>
Klar, an die ganzen <...> muss man sich echt gewöhnen, aber da kommt man 
in der C++-Standard-Bibliothek halt nicht drum rum. Dafür bekommt man 
auch einen minimalen Overhead (der durchaus auch 0 sein kann).

Mit freundlichen Grüßen,
N.G.

Beitrag #5258533 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.