mikrocontroller.net

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


Autor: cpp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
3 lesenswert
nicht lesenswert

Autor: Kaj G. (Firma: RUB) (bloody)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: N. G. (newgeneration) Benutzerseite
Datum:

Bewertung
-1 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.