C++ Academy · Lektion

Vector jämfört med std::array och C-array

Jämför de tre sekventiella containrarna och välj en utifrån storlek, ägarskap och prestanda

Lektion 4 av 413 steg

Vector jämfört med std::array och C-array är en gratis lektion i C++ Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för C++ Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C++ Academy innehåller totalt 4 lektioner.

Tre sekventiella behållare

C++ har tre sätt att lagra en sammanhängande sekvens:

  • std::vector — dynamisk storlek, lagring på heapen
  • std::array — fast storlek vid kompilering, lagring på stacken
  • C-style array — fast storlek, lågnivå

C-arrayer

Den äldsta formen. Storleken är en del av typen. Omvandlas till en pekare när den skickas till funktioner — och storleken går förlorad.

int a[5] = {1, 2, 3, 4, 5};
std::cout << a[2];   // 3

Problem med C-arrayer

De glömmer sin storlek i de flesta sammanhang, kontrollerar inte arraygränser och är lätta att använda fel. Föredra std::array eller std::vector i ny kod.

std::array (C++11)

Ett tunt omslag runt en array med fast storlek. Samma prestanda som en C-array, men med en riktig typ och korrekta 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 ligger kvar på stacken

Till skillnad från vector lagrar std::array sina element direkt. Ingen heap-allokering. Storleken är en mallparameter.

std::vector för dynamisk storlek

Använd std::vector när du inte känner till storleken vid kompilering eller när storleken kommer att ändras under körning.

Prestandajämförelse

För fasta storlekar har alla tre liknande prestanda. std::vector medför en liten kostnad för hanteringen av pekare och storlek samt ytterligare en indirektion.

Skicka till funktioner

Skicka vector eller std::array som const-referens för att undvika kopior. C-arrayer bör ersättas med std::span (C++20) när du lånar 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 icke-ägande vy över en sammanhängande sekvens. Som ett par bestående av en pekare och en längd. Accepterar vektorer, std-arrayer och C-arrayer på ett enhetligt sätt.

När ska man välja vad

Beslutsträd:

  • Dynamisk storlek behövs → std::vector
  • Fast storlek, ingen allokering → std::array
  • Låna utan ägarskap → std::span
  • Samverkan med C-kod → C-array

Konvertering mellan dem

Du kan kopiera element mellan typerna med hjälp av 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);

Snabbtest

Vilken behållare lagrar element på stacken och har en storlek som är känd vid kompilering?

Sammanfattning

Föredra std::vector för dynamisk storlek och std::array för fast storlek. C-arrayer är sällan det bästa valet i modern kod. Använd std::span för att låna en sekvens utan att äga den.

Gratis att börja

Lär dig C++ med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Vector jämfört med std::array och C-array” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen C++ Academy, inklusive ”Vector jämfört med std::array och C-array”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i C++ Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Vector jämfört med std::array och C-array”?

Jämför de tre sekventiella containrarna och välj en utifrån storlek, ägarskap och prestanda Ni övar på C++ Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C++ Academy?

Du behöver inga förkunskaper. Utbildningen i C++ Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Vector jämfört med std::array och C-array”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C++ Academy-lektionen?

Ja. Varje C++ Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grunderna i std::vector: push_back, size, capacity
  2. Iterera över vektorer: index, range-for och iteratorer
  3. Ändra vektorer: insert, erase, clear
  4. Vector jämfört med std::array och C-array
← Tillbaka till C++ Academy