Untitled
unknown
plain_text
4 years ago
2.2 kB
7
Indexable
void Contenitore::inserisci(int elem) {
//Funzione abbastanza complicata, se gli elementi utilizzati non superano la capacità del contenitore posso inserire un valore
if (utilizzati < capacita) {
elementi[utilizzati] = elem;
utilizzati += 1;
//cout << utilizzati;
}
else {/*Cerchiamo di ottenere una doppia traccia dei nostri valori, iniziamo con un puntatore d' appoggio, dove prendere tutti i valori
precedenti del primo puntatore in modo da non perderli questo puntatore d' appoggio avrà la dimensione incrementata di 1
in modo che ogni volta che l' utente supera la capacità ma vuole reisenrire un valore, non si va in overflow, di conseguenza
il nostro puntatore di partenza viene liberato e si riprende tutti i valori che si salva momentaneamente il puntatore d' appoggio*/
//Nel momento in cui i valori utilizzati sono uguali alla capacità, rischio di andare in overflow appena inserisco un valore
int* v = new int[utilizzati + 1]; //Puntatore con dimensione incrementata di 1
for (int i = 0; i < utilizzati; i++) //Questo puntatore si salva gli elementi del vettore di partenza
v[i] = elementi[i]; //In questo modo i valoro iniziali inserita da utente non vanno persi
v[utilizzati] = elem; //E ora, in testa al nostro puntatore, che é diventato un vettore, andiamo a inserire il nuovo valore inserito da utente
utilizzati += 1; //Aggiornamiamo la variabili utilizzati
for (int i = 0; i < utilizzati; i++)
cout << v[i] << " ";
delete[] elementi; //Ora liberiamo il vettore iniziale
elementi = new int[utilizzati]; //Allochiamo al puntatore, e lo facciamo diventare un vettore nuovo con dimensione incrementata
for (int i = 0; i < utilizzati; i++)
/*Quello che era il nostro vettore iniziale, continua ad esserlo, e si riprende i suoi valori iniziali insieme a quello nuovo
che sarebbe andato in overflow*/
elementi[i] = v[i];
capacita = utilizzati; //Aggiorniamo la capacità del contenitore
delete[] v; //Cancelliamo anche lo spazio dedicato nel nostro puntatore secondario
}
}Editor is loading...