Was sind die Unterschiede zwischen einem Array und einem Vektor in C ++? Ein Beispiel für die Unterschiede könnten Bibliotheken, Symbolik, Fähigkeiten usw. sein.
Array
Arrays enthalten eine bestimmte Anzahl von Elementen eines bestimmten Typs. Damit der Compiler beim Kompilieren des Programms den erforderlichen Speicherplatz reservieren kann, müssen Sie den Typ und die Anzahl der Elemente angeben, die das Array bei seiner Definition enthalten soll. Der Compiler muss diesen Wert beim Kompilieren des Programms ermitteln können. Sobald ein Array definiert wurde, verwenden Sie den Bezeichner für das Array zusammen mit einem Index, um auf bestimmte Elemente des Arrays zuzugreifen. [...] Arrays sind nullindiziert; Das heißt, das erste Element befindet sich am Index 0. Dieses Indexierungsschema zeigt die enge Beziehung in C ++ zwischen Zeigern und Arrays und die Regeln an, die die Sprache für die Zeigerarithmetik definiert.
- C ++ - Taschenreferenz
Vektor
Ein Vektor ist eine dynamisch große Folge von Objekten, die einen
operator[]
Direktzugriff im Array-Stil ermöglicht. Die Member-Funktionpush_back
kopiert ihre Argumente über den Kopierkonstruktor, fügt diese Kopie als letztes Element im Vektor hinzu und erhöht ihre Größe um eins.pop_back
macht genau das Gegenteil, indem das letzte Element entfernt wird. Das Einfügen oder Löschen von Elementen am Ende eines Vektors benötigt eine amortisierte konstante Zeit, und das Einfügen oder Löschen von einem anderen Ort benötigt lineare Zeit. Dies sind die Grundlagen von Vektoren. Sie haben noch viel mehr zu bieten. In den meisten Fällen sollte ein Vektor Ihre erste Wahl gegenüber einem Array im C-Stil sein. Erstens sind sie dynamisch dimensioniert, was bedeutet, dass sie nach Bedarf wachsen können. Sie müssen nicht alle möglichen Untersuchungen durchführen, um eine optimale statische Größe zu ermitteln, wie im Fall von C-Arrays. Ein Vektor wächst nach Bedarf und kann bei Bedarf manuell vergrößert oder verkleinert werden. Zweitens bieten Vektoren die Überprüfung von Grenzen mit derat
Elementfunktion (jedoch nicht mitoperator[]
), damit Sie etwas tun können, wenn Sie auf einen nicht vorhandenen Index verweisen, anstatt nur zu beobachten, wie Ihr Programm abstürzt oder schlimmer noch, und die Ausführung mit beschädigten Daten fortsetzen.- C ++ Kochbuch
Antworten:
Arrays:
malloc
).sizeof
(daher die allgemeine Redewendungsizeof(arr)/sizeof(*arr)
, die jedoch unbeabsichtigt fehlschlägt, wenn sie versehentlich für einen Zeiger verwendet wird).std::vector
::&vec[0]
funktioniert garantiert wie erwartet);begin()
/end()
Methoden, die üblichen STLstypedef
, ...)Betrachten Sie auch die "moderne Alternative" zu Arrays -
std::array
; Ich habe bereits in einer anderen Antwort den Unterschied zwischenstd::vector
und beschriebenstd::array
, vielleicht möchten Sie einen Blick darauf werfen.quelle
Ich werde hinzufügen, dass Arrays in C ++ Konstrukte auf sehr niedriger Ebene sind und Sie sollten versuchen, sich so weit wie möglich von ihnen fernzuhalten, wenn Sie "die Seile lernen" - sogar Bjarne Stroustrup empfiehlt dies (er ist der Designer von C ++).
Vektoren kommen der Leistung von Arrays sehr nahe, bieten jedoch zahlreiche Annehmlichkeiten und Sicherheitsfunktionen. Sie werden wahrscheinlich Arrays verwenden, wenn Sie eine Schnittstelle zu APIs herstellen, die sich mit Raw-Arrays befassen, oder wenn Sie Ihre eigenen Sammlungen erstellen.
quelle
Diese Referenzen haben Ihre Frage ziemlich genau beantwortet. Einfach ausgedrückt sind die Längen der Vektoren dynamisch, während Arrays eine feste Größe haben. Wenn Sie ein Array verwenden, geben Sie seine Größe bei der Deklaration an:
Für Vektoren deklarieren Sie es einfach und fügen Elemente hinzu
Manchmal wissen Sie nicht, wie viele Elemente benötigt werden, sodass ein Vektor für eine solche Situation ideal ist.
quelle