Vector kontra std::array kontra C-array
Sammenlign de tre sekventielle containere, og vælg ud fra størrelse, ejerskab og ydeevne
Vector kontra std::array kontra C-array er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
Tre sekventielle containere
C++ har tre måder at opbevare en sammenhængende sekvens på:
- std::vector — dynamisk størrelse, lager på heapen
- std::array — fast størrelse ved kompilering, lager på stacken
- C-array — fast størrelse, lavt niveau
C-arrays
Den ældste form. Størrelsen er en del af typen. Konverteres til en pointer, når den gives til funktioner — og størrelsen går tabt.
int a[5] = {1, 2, 3, 4, 5};
std::cout << a[2]; // 3Problemer med C-arrays
De glemmer deres størrelse i de fleste sammenhænge, kontrollerer ikke grænser og er nemme at bruge forkert. Foretræk std::array eller std::vector i ny kode.
std::array (C++11)
En tynd indpakning omkring et array med fast størrelse. Samme ydeevne som et C-array, men med en rigtig type og korrekte medlemsfunktioner.
#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 bliver på stacken
I modsætning til vector gemmer std::array sine elementer direkte. Ingen allokering på heapen. Størrelsen er en skabelonparameter.
std::vector til dynamisk størrelse
Brug std::vector, når du ikke kender størrelsen ved kompilering, eller når størrelsen ændrer sig under kørsel.
Sammenligning af ydeevne
Ved faste størrelser har alle tre omtrent samme ydeevne. std::vector tilføjer en lille omkostning til administrationen af pointer og størrelse samt én indirekte adressering.
Videregivelse til funktioner
Videregiv vector eller std::array som const-reference for at undgå kopier. C-arrays bør erstattes af std::span (C++20), når du låner dem.
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)
En visning uden ejerskab over en sammenhængende sekvens. Som et par bestående af en pointer og en længde. Accepterer vector, std::array og C-arrays ensartet.
Hvornår skal du vælge hvad
Beslutningstræ:
- Der er brug for dynamisk størrelse →
std::vector - Fast størrelse uden allokering →
std::array - Lån uden ejerskab →
std::span - Samspil med C-kode → C-array
Konvertering mellem dem
Du kan kopiere elementer mellem typer ved hjælp af ranges eller algoritmer.
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);Hurtig kontrol
Hvilken container gemmer elementer på stacken og har en størrelse, der er kendt ved kompilering?
Opsummering
Foretræk std::vector til dynamisk størrelse og std::array til fast størrelse. C-arrays er sjældent det bedste valg i moderne kode. Brug std::span til at låne en sekvens uden at eje den.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Vector kontra std::array kontra C-array” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Vector kontra std::array kontra C-array”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Vector kontra std::array kontra C-array”?
Sammenlign de tre sekventielle containere, og vælg ud fra størrelse, ejerskab og ydeevne Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Vector kontra std::array kontra C-array”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende std::vector: push_back, size, capacity
- Iteration over vektorer: indeks, range-for, iteratorer
- Ændring af vektorer: insert, erase, clear
- Vector kontra std::array kontra C-array