C++ Academy · Lektion

Vector kontra std::array kontra C-array

Sammenlign de tre sekventielle containere, og vælg ud fra størrelse, ejerskab og ydeevne

Lektion 4 af 413 trin

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];   // 3

Problemer 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-checked

std::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 both

std::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.

Gratis at komme i gang

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

  1. Grundlæggende std::vector: push_back, size, capacity
  2. Iteration over vektorer: indeks, range-for, iteratorer
  3. Ændring af vektorer: insert, erase, clear
  4. Vector kontra std::array kontra C-array
← Tilbage til C++ Academy