Vector (STL)

Da Wikipedia, l'enciclopedia libera.

Il container vector è un contenitore di elementi omogenei simile all'array e facente parte della libreria standard del C++, con la funzione di permettere l'accesso ai suoi contenuti in modo rapido e ottimizzato utilizzando indici o tramite un iteratore. La definizione di questa classe si trova nel file header <vector> del namespace std.

Esso rappresenta in sostanza una versione evoluta dell'array del c. Infatti al contrario di esso non ha una capacità massima prefissata in tempo di compilazione, ma si espande durante l'esecuzione a seconda delle necessità.

Dimensione e Capacità[modifica | modifica sorgente]

La dimensione del vettore e la sua capacità non rappresentano la stessa cosa: mentre la dimensione è il numero degli elementi facenti parte del vector, la capacità è il numero massimo di elementi memorizzabili. Inserendo un nuovo elemento nel vettore avendo raggiunto la capacità massima si avrà un aumento della capacità e un ridimensionamento dell'area di memoria (contigua) atta a contenere il vector. È possibile quindi in questa fase che il vector venga effettivamente spostato in un'altra area di memoria e con esso gli elementi contenuti. Per evitare questa operazione potenzialmente molto onerosa si può:

  • se nota a priori, costruire subito il vector con una capacità pari a quella stimata (tramite il metodo reserve)
  • memorizzare nel vector non gli oggetti ma puntatori ad essi

Operazioni sugli elementi[modifica | modifica sorgente]

L'accesso agli elementi è di tipo casuale, e particolarmente efficaci sono le operazioni di inserimento e rimozione in coda. Tuttavia la rimozione di un elemento in mezzo al vector comporta lo spostamento di tutti gli elementi successivi, per questo motivo qualora sia necessario effettuare spesso operazioni di questo tipo si può:

  • utilizzare un contenitore più appropriato, ad esempio list
  • memorizzare nel vector non gli oggetti veri e propri, ma puntatori ad essi

Ecco un esempio di costruzione e scorrimento di un vector:

std::vector <int> v;
v.push_back(1);
v.push_back(2);
v.push_back(5);
for (int i = 0; i < v.size(); i++)
 std::cout << v[i] << std::endl;