C++ offre diversi contenitori per memorizzare elementi dello stesso tipo in modo ordinato.
Esiste std::array per i contenitori di dimensione fissa e std::vector, che offre la capacità di ridimensionarsi dinamicamente.
Quando dichiari un array o un vector, devi specificare il tipo di elementi che il contenitore conterrà. Gli array richiedono anche una dimensione. Guarda questi esempi per vedere come si inizializzano i due tipi di contenitore:
#include <array>
#include <string>
// std::array<element_type, size> variable_name {list of elements}
std::array<std::string, 3> indie_rock {"yeah", "yeah", "yeah"};
// indie_rock contains the elements "yeah" three times
I vector di solito richiedono più spazio, perché allocano memoria per crescere ulteriormente. Non devi specificare una dimensione:
#include <vector>
// std::vector<element_type> variable_name {list of elements}
std::vector<int> countdown {3, 2, 1};
// my_vector contains the elements 3, 2 and 1
Nota: per ora non devi conoscere i meccanismi esatti che stanno dietro ai template: ci sarà un concetto dedicato più in basso nell'albero del percorso.
I vector e gli array condividono le stesse funzioni per accedere ai loro elementi.
Puoi usare le funzioni membro front e back per ottenere il primo e l'ultimo elemento del contenitore.
Ci sono anche at e l'operatore [] per accedere a elementi specifici.
countdown[0];
// => 3
countdown.at(2);
// => 1
countdown[1] = 4;
// countdown now contains 3, 4 and 1
indie_rock.back() = "yeahs";
// indie_rock is now "yeah", "yeah", "yeahs"
Nota: se scegli una posizione che non rientra nell'intervallo del contenitore,
[]può portare a un comportamento indefinito. La funzioneatsolleverebbe un'eccezione, il che a lungo termine potrebbe semplificarti la vita.
Dato che un vector non ha dimensione fissa, è possibile aggiungere o rimuovere elementi.
Due funzioni comuni a questo scopo sono emplace_back e pop_back.
std::vector<std::string> witches {"Holly", "Alyssa", "Shannen"};
witches.pop_back();
// Shannen is no longer with the witches
witches.emplace_back("Rose");
// Rose has joined the team
Puoi verificare se un contenitore è vuoto con la funzione membro empty.
Per conoscere il numero di elementi, puoi usare size.