Untitled
unknown
c_cpp
4 years ago
2.2 kB
6
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...