Untitled

mail@pastecode.io avatar
unknown
plain_text
3 years ago
2.2 kB
1
Indexable
Never
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
    }
}