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
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]; // 3Problem 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-checkedstd::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 bothstd::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.
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
- Grunderna i std::vector: push_back, size, capacity
- Iterera över vektorer: index, range-for och iteratorer
- Ändra vektorer: insert, erase, clear
- Vector jämfört med std::array och C-array