C++ Allocazione dinamica degli array con esempio
โก Riepilogo intelligente
C++ La sezione "Allocazione dinamica degli array" spiega come allocare, ridimensionare ed eliminare array nell'heap in fase di esecuzione. Lessons copre i modelli di memoria nuovi, elimina[], inizializzazione, copia, ridimensionamento e sicuri.

Cos'รจ un array dinamico?
Un array dinamico รจ abbastanza simile a un array normale, ma la sua dimensione รจ modificabile durante l'esecuzione del programma. Gli elementi DynamArray occupano un blocco di memoria contiguo.
Una volta creato un array, la sua dimensione non puรฒ essere modificata. Tuttavia, un array dinamico รจ diverso. Un array dinamico puรฒ espandere le proprie dimensioni anche dopo essere stato riempito.
Durante la creazione di un array, ad esso viene allocata una quantitร predeterminata di memoria. Questo non รจ il caso di un array dinamico poichรฉ aumenta la dimensione della memoria di un certo fattore quando ce n'รจ bisogno.
Fattori che influiscono sulle prestazioni degli array dinamici
La dimensione iniziale dell'array e il suo fattore di crescita determinano le sue prestazioni. Nota i seguenti punti:
- Se un array ha dimensioni ridotte e un fattore di crescita ridotto, continuerร a riallocare la memoria piรน spesso. Ciรฒ ridurrร le prestazioni dell'array.
- Se un array ha grandi dimensioni e un fattore di crescita elevato, avrร un'enorme porzione di memoria inutilizzata. Per questo motivo, le operazioni di ridimensionamento potrebbero richiedere piรน tempo. Ciรฒ ridurrร le prestazioni dell'array.
La nuova parola chiave
In C++, possiamo creare un array dinamico usando la parola chiave new. Il numero di elementi da allocare รจ specificato all'interno di una coppia di parentesi quadre. Il nome del tipo dovrebbe precedere questo. Il numero di elementi richiesto verrร allocato.
Sintassi
La parola chiave new ha la seguente sintassi:
pointer_variable = new data_type;
La variabile_puntatore รจ il nome del file puntatore variabile.
Il tipo_dati deve essere valido C++ tipo di dati.
La parola chiave restituisce quindi un puntatore al primo elemento. Dopo aver creato l'array dinamico, possiamo eliminarlo utilizzando la parola chiave delete.
Esempio 1:
#include<iostream> using namespace std; int main() { int x, n; cout << "Enter the number of items:" << "\n"; cin >>n; int *arr = new int[n]; cout << "Enter " << n << " items" << endl; for (x = 0; x < n; x++) { cin >> arr[x]; } cout << "You entered: "; for (x = 0; x < n; x++) { cout << arr[x] << " "; } return 0; }
Produzione:
Ecco uno screenshot del codice:
Code Spiegazione:
- Includi il file header iostream nel nostro programma per usarlo funzioni.
- Includi lo spazio dei nomi std nel nostro programma per poter utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta all'interno del corpo della funzione.
- Dichiarare due variabili intere x e n.
- Stampa del testo sulla console chiedendo all'utente di inserire il valore della variabile n.
- Leggere l'input dell'utente dalla tastiera e assegnarlo alla variabile n.
- Dichiara un array per contenere un totale di n numeri interi e assegnalo alla variabile puntatore *arr.
- Stampa un messaggio che richiede all'utente di inserire n numero di elementi.
- Utilizzare un ciclo for per creare una variabile di ciclo x per scorrere gli elementi immessi dall'utente.
- Legge gli elementi immessi dall'utente e li memorizza nell'array arr.
- Fine del corpo del per loop.
- Stampa del testo sulla console.
- Utilizzare un ciclo for per creare una variabile di ciclo x per scorrere gli elementi dell'array.
- Stampa i valori contenuti nell'array denominato arr sulla console.
- Fine del corpo del ciclo for.
- Il programma deve restituire valore in caso di completamento positivo.
- Fine del corpo della funzione main().
NOTA: nell'esempio precedente, all'utente รจ consentito specificare qualsiasi dimensione per l'array durante il runtime. Ciรฒ significa che la dimensione dell'array viene determinata durante il runtime.
Inizializzazione di array allocati dinamicamente
ร facile inizializzare un array dinamico su 0.
Sintassi:
int *array{ new int[length]{} };
Nella sintassi precedente, la lunghezza indica il numero di elementi da aggiungere all'array. Poichรฉ dobbiamo inizializzare l'array su 0, questo dovrebbe essere lasciato vuoto.
Possiamo inizializzare un array dinamico utilizzando un elenco di inizializzatori. Creiamo un esempio che lo dimostri.
Esempio 2:
#include <iostream> using namespace std; int main(void) { int x; int *array{ new int[5]{ 10, 7, 15, 3, 11 } }; cout << "Array elements: " << endl; for (x = 0; x < 5; x++) { cout << array[x] << endl; } return 0; }
Produzione:
Ecco uno screenshot del codice:
Code Spiegazione:
- Includi il file header iostream nel nostro programma per utilizzare le sue funzioni.
- Includi lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta all'interno del corpo della funzione.
- Dichiarare una variabile intera denominata x.
- Dichiarare un array dinamico denominato array utilizzando un elenco di inizializzatori. L'array conterrร 5 elementi interi. Tieni presente che non abbiamo utilizzato l'operatore "=" tra la lunghezza dell'array e l'elenco degli inizializzatori.
- Stampa del testo sulla console. La fine รจ a C++ parola chiave che significa fine riga. Sposta il cursore alla frase successiva.
- Utilizzare un ciclo for per scorrere gli elementi dell'array.
- Stampa il contenuto dell'array denominato array sulla console.
- Fine del corpo del ciclo for.
- Il programma deve restituire valore in caso di completamento positivo.
- Fine del corpo della funzione main().
Ridimensionamento degli array
La lunghezza di un array dinamico viene impostata durante il tempo di allocazione.
Perรฒ, C++ non ha un meccanismo integrato per ridimensionare un array una volta che รจ stato allocato.
ร tuttavia possibile superare questa sfida allocando dinamicamente un nuovo array, copiando gli elementi e quindi cancellando il vecchio array.
Nota: questa tecnica รจ soggetta a errori, quindi cerca di evitarla.
Eliminazione dinamica degli array
Un array dinamico dovrebbe essere eliminato dalla memoria del computer una volta raggiunto il suo scopo. L'istruzione delete puรฒ aiutarti a raggiungere questo obiettivo. Lo spazio di memoria liberato puรฒ quindi essere utilizzato per contenere un altro set di dati. Tuttavia, anche se non si elimina l'array dinamico dalla memoria del computer, verrร eliminato automaticamente una volta terminato il programma.
Nota:
Per eliminare un array dinamico dalla memoria del computer, รจ necessario utilizzare delete[], invece di delete. Il [] indica alla CPU di eliminare piรน variabili anzichรฉ una variabile. L'uso di delete invece di delete[] quando si ha a che fare con un array dinamico puรฒ causare problemi. Esempi di tali problemi includono perdite di memoria, danneggiamento dei dati, arresti anomali, ecc.
Esempio 3:
#include<iostream> using namespace std; int main() { int x, n; cout << "How many numbers will you type?" << "\n"; cin >>n; int *arr = new int[n]; cout << "Enter " << n << " numbers" << endl; for (x = 0; x < n; x++) { cin >> arr[x]; } cout << "You typed: "; for (x = 0; x < n; x++) { cout << arr[x] << " "; } cout << endl; delete [] arr; return 0; }
Produzione:
Ecco uno screenshot del codice:
Code Spiegazione:
- Includi il file header iostream nel nostro programma per poter utilizzare le sue funzioni.
- Includi lo spazio dei nomi std nel nostro programma per poter utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta all'interno del corpo della funzione.
- Dichiarare due variabili x e n del tipo di dati intero.
- Stampa del testo sulla console. Il testo chiederร all'utente di indicare il numero di numeri che inserirร .
- Leggere l'input dell'utente dalla tastiera. Il valore di input verrร assegnato alla variabile n.
- Dichiarare una variabile puntatore *arr. L'array arr riserverร della memoria per memorizzare un totale di n numeri interi.
- Stampa un messaggio sulla console chiedendo all'utente di inserire n numeri.
- Crea un ciclo for e la variabile del ciclo x per scorrere i numeri immessi dall'utente.
- Legge i numeri immessi dall'utente e li memorizza nell'array arr.
- Fine del corpo del ciclo for.
- Stampa del testo sulla console.
- Utilizzare un ciclo for e la variabile del ciclo x per scorrere il contenuto dell'array arr.
- Stampa i valori dell'array arr sulla console.
- Fine del corpo del ciclo for.
- Stampa una riga vuota sulla console.
- Liberare la memoria dell'array arr.
- Il programma restituirร il valore una volta completato con successo.
- Fine del corpo della funzione main().






