Vector vs. std::array vs. C-Array
Vergleichen Sie die drei sequenziellen Container und wählen Sie anhand von Größe, Besitzverhältnissen und Leistung den passenden aus.
Vector vs. std::array vs. C-Array ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Drei sequenzielle Container
C++ bietet drei Möglichkeiten, eine zusammenhängende Sequenz zu speichern:
- std::vector — variable Größe, Speicherung auf dem Heap
- std::array — zur Compile-Zeit festgelegte Größe, Speicherung auf dem Stack
- C-style array — feste Größe, hardwarenah
C-Arrays
Die älteste Form. Die Größe ist Bestandteil des Typs. Bei der Übergabe an Funktionen wird das Array zu einem Zeiger, wodurch die Größe verloren geht.
int a[5] = {1, 2, 3, 4, 5};
std::cout << a[2]; // 3Probleme mit C-Arrays
In den meisten Kontexten verlieren sie ihre Größe, führen keine Bereichsprüfung durch und können leicht falsch verwendet werden. Bevorzugen Sie in neuem Code std::array oder std::vector.
std::array (C++11)
Eine dünne Hülle um ein Array mit fester Größe. Die Performance entspricht der eines C-Arrays, aber der Typ ist korrekt definiert und es stehen geeignete Memberfunktionen zur Verfügung.
#include <array>
std::array<int, 5> a = {1, 2, 3, 4, 5};
std::cout << a.size(); // 5
std::cout << a.at(2); // bounds-checkedstd::array bleibt auf dem Stack
Im Gegensatz zu einem vector speichert std::array seine Elemente direkt. Es findet keine Heap-Allokation statt. Die Größe ist ein Template-Parameter.
std::vector für variable Größe
Verwenden Sie std::vector, wenn die Größe zur Compile-Zeit nicht bekannt ist oder sich zur Laufzeit ändern wird.
Leistungsvergleich
Bei festen Größen ist die Performance aller drei Varianten ähnlich. std::vector verursacht einen kleinen Mehraufwand durch die Verwaltung von Zeiger und Größe sowie durch eine zusätzliche Indirektion.
Übergabe an Funktionen
Übergeben Sie vector oder std::array als const-Referenz, um Kopien zu vermeiden. C-Arrays sollten beim Ausleihen durch std::span (C++20) ersetzt werden.
void process(const std::vector<int>& v);
void process(const std::array<int, 5>& a);
#include <span>
void process(std::span<const int> data); // accepts bothstd::span (C++20)
Eine nicht besitzende Sicht auf eine zusammenhängende Sequenz. Sie entspricht einem Paar aus Zeiger und Länge. Sie akzeptiert vector, std::array und C-Arrays einheitlich.
Wann Sie welchen Container wählen
Entscheidungsbaum:
- Variable Größe erforderlich →
std::vector - Feste Größe, keine Allokation →
std::array - Ausleihen ohne Besitz →
std::span - Zusammenspiel mit C-Code → C-Array
Konvertierung zwischen ihnen
Sie können Elemente mithilfe von Ranges oder Algorithmen zwischen den Typen kopieren.
std::array<int, 3> a = {1, 2, 3};
std::vector<int> v(a.begin(), a.end());
int c[3];
std::copy(a.begin(), a.end(), c);Kurzer Test
Welcher Container speichert seine Elemente auf dem Stack und hat eine zur Compile-Zeit bekannte Größe?
Zusammenfassung
Bevorzugen Sie std::vector für variable Größen und std::array für feste Größen. C-style arrays sind in modernem Code nur selten die beste Wahl. Verwenden Sie std::span, um eine Sequenz auszuleihen, ohne sie zu besitzen.
Häufig gestellte Fragen
Ist die Lektion „Vector vs. std::array vs. C-Array“ kostenlos?
Ja — der vollständige Text von „Vector vs. std::array vs. C-Array“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Vector vs. std::array vs. C-Array“?
Vergleichen Sie die drei sequenziellen Container und wählen Sie anhand von Größe, Besitzverhältnissen und Leistung den passenden aus. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Vector vs. std::array vs. C-Array“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Grundlagen von std::vector: push_back, size, capacity
- Vektoren durchlaufen: Index, range-for, Iteratoren
- Vektoren ändern: insert, erase, clear
- Vector vs. std::array vs. C-Array