sabato 29 ottobre 2011

Tips: inserimento in un Vector


Un vector è una struttura dati con accesso diretto ed è una tra le strutture più utilizzate quando programmiamo. In C++ uno degli errori più commessi e "sottili" è fondere i due possibili usi del nostro vettore
Esso, infatti, può essere utilizzato in modo STL o in modo array. Il modo STL (Standard Template Library), permette di inserire valori mediante la funzione push_back( ), definire un vettore senza specificarne la dimensione e molto altro. Se usiamo un vettore in "stile array" lo trattiamo praticamente come un array normale e dunque specificando la dimensione, eventualmente gli elementi contenuti, accedendo in modo diretto alla posizione 'i' del vettore ecc. Ovviamente si possono usare i due metodi assieme, ma molte volte attuare questa soluzione può confondere le idee. Ammettiamo di dover dichiarare un vector di interi in stile array con 10 elementi:

vector<int>v (10);

Nel corso del programma vorremmo aggiungere un elemento, o comunque impostarlo a un certo valore. La soluzione più banale sarebbe:

v[pos]=valore;

Trattando il nostro vettore come un array e fin qui tutto ok. Ma se ci venisse in mente di scrivere:

v.push_back(valore)

Avremmo una brutta sorpresa: il valore non si troverà in posizione 0, bensì in posizione 10. Il vettore dichiarato prima aveva indici che andavano da 0 a dimensione-1, nel nostro caso da 0 a 9. Se tentiamo di fare un push back sul vettore esso lo effettuerà su una posizione in più, rispetto alla sua dimensione, creando un'altra cella. Se per esempio ci fosse un ciclo:
for (int i=0;i<10;i++)
   v.push_back(i);

applicato sul vettore dichiarato prima, v, noi otterremmo un vettore di ben 20 elementi, avente i valori inseriti mediante il push_back a partire dall'indice 10!
Anche se può sembrare banale è sempre meglio controllare la dichiarazione di un vettore e il suo utilizzo in tutto il programma, per evitare inserimenti spiacevoli.

Nessun commento:

Posta un commento