C++: vector vs array

(Firma: RUB) #5244310
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.
Persönliche Seite #5244312
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.