0Pricing
C++ Academy · Lezione

Vector, std::array e array C a confronto

Confronti i tre contenitori sequenziali e ne scelga uno in base a dimensioni, ownership e prestazioni

Vector, std::array e array C a confronto è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Tre contenitori sequenziali

C++ offre tre modi per contenere una sequenza contigua:

  • std::vector — dimensione dinamica, memorizzazione nell'heap
  • std::array — dimensione fissa in fase di compilazione, memorizzazione nello stack
  • Array in stile C — dimensione fissa, livello più basso

Array in stile C

La forma più antica. La dimensione fa parte del tipo. Quando viene passato a una funzione, decade a puntatore, perdendo la dimensione.

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

Problemi degli array in stile C

Nella maggior parte dei contesti perdono l'informazione sulla dimensione, non verificano i limiti e sono facili da usare in modo scorretto. Nel nuovo codice, preferisca std::array o std::vector.

std::array (C++11)

Un involucro sottile attorno a un array di dimensione fissa. Ha le stesse prestazioni di un array C, ma offre un tipo reale e funzioni membro appropriate.

#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 rimane nello stack

A differenza di vector, std::array memorizza direttamente i propri elementi. Non effettua alcuna allocazione nell'heap. La dimensione è un parametro del template.

std::vector per dimensioni dinamiche

Utilizzi std::vector quando non conosce la dimensione in fase di compilazione o quando la dimensione cambierà durante l'esecuzione.

Confronto delle prestazioni

Per dimensioni fisse, tutti e tre offrono prestazioni simili. std::vector aggiunge un piccolo overhead per la gestione di puntatore e dimensione, oltre a un livello di indirezione.

Passaggio alle funzioni

Passi vector o std::array per riferimento const per evitare copie. Gli array C dovrebbero essere sostituiti da std::span (C++20) quando si prende in prestito una sequenza.

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)

Una vista non proprietaria su una sequenza contigua. È simile a una coppia puntatore + lunghezza. Accetta in modo uniforme vector, std::array e array C.

Come scegliere

Albero decisionale:

  • Serve una dimensione dinamica → std::vector
  • Dimensione fissa, nessuna allocazione → std::array
  • Prestito senza proprietà → std::span
  • Interop­erabilità con codice C → array C

Conversione tra i contenitori

È possibile copiare gli elementi tra i vari tipi utilizzando ranges o algoritmi.

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);

Verifica rapida

Quale contenitore memorizza gli elementi nello stack e ha una dimensione nota in fase di compilazione?

Riepilogo

Preferisca std::vector per le dimensioni dinamiche e std::array per quelle fisse. Gli array in stile C sono raramente la scelta migliore nel codice moderno. Utilizzi std::span per prendere in prestito una sequenza senza assumerne la proprietà.

Domande Frequenti

La lezione «Vector, std::array e array C a confronto» è gratuita?

Sì — il testo completo di «Vector, std::array e array C a confronto» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Vector, std::array e array C a confronto»?

Confronti i tre contenitori sequenziali e ne scelga uno in base a dimensioni, ownership e prestazioni Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Vector, std::array e array C a confronto»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Basi di std::vector: push_back, size, capacity
  2. Iterazione sui vector: indice, range-for, iteratori
  3. Modifica dei vector: insert, erase, clear
  4. Vector, std::array e array C a confronto
← Torna a C++ Academy