Cos'è un array dinamico?
Un array dinamico è abbastanza simile a un array normale, ma la sua dimensione è modificabile durante il runtime 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 sue dimensioni anche dopo essere stato riempito.
Durante la creazione di un array, viene allocata una quantità di memoria predeterminata. Questo non è il caso di un array dinamico poiché aumenta la dimensione della memoria di un certo fattore quando è necessario.
In questo tutorial C ++ imparerai
- Cos'è un array dinamico?
- Fattori che influenzano le prestazioni degli array dinamici
- La nuova parola chiave
- Inizializzazione di array allocati dinamicamente
- Ridimensionamento degli array
- Eliminazione dinamica di array
Fattori che influenzano le 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 una dimensione ridotta e un fattore di crescita ridotto, continuerà a riallocare la memoria più spesso. Ciò ridurrà le prestazioni dell'array.
- Se un array ha una dimensione elevata 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 utilizzando la nuova parola chiave. 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 articoli richiesto verrà assegnato.
Sintassi:
La nuova parola chiave ha la seguente sintassi:
pointer_variable = new data_type;
Pointer_variable è il nome della variabile pointer.
Data_type deve essere un tipo di dati C ++ valido.
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:
#includeusing 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:
Spiegazione del codice:
- Includere il file di intestazione iostream nel nostro programma per utilizzare le sue funzioni.
- Includere 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 che richiede all'utente di inserire il valore della variabile n.
- Leggere l'input dell'utente dalla tastiera e assegnarlo alla variabile n.
- Dichiarare che un array contenga un totale di n interi e assegnarlo alla variabile del 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 inseriti dall'utente.
- Leggere gli elementi inseriti dall'utente e memorizzarli nell'array arr.
- Fine del corpo del ciclo for.
- Stampa del testo sulla console.
- Utilizzare un ciclo for per creare una variabile di ciclo x per iterare sugli elementi dell'array.
- Stampa i valori contenuti nell'array denominato arr sulla console.
- Fine del corpo del ciclo for.
- Il programma deve restituire un valore una volta completato con successo.
- Fine del corpo della funzione main ().
NOTA: Nell'esempio precedente, l'utente è autorizzato a 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é abbiamo bisogno di 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:
#includeusing 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:
Spiegazione del codice:
- Includere il file di intestazione iostream nel nostro programma per utilizzare le sue funzioni.
- Includere 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. Nota che non abbiamo usato l'operatore tra la lunghezza dell'array e l'elenco degli inizializzatori.
- Stampa del testo sulla console. Endl è una parola chiave C ++ che significa end line. Sposta il cursore sulla frase successiva.
- Usa un ciclo for per iterare sugli elementi dell'array.
- Stampa il contenuto dell'array denominato array sulla console.
- Fine del corpo del ciclo for.
- Il programma deve restituire un valore una volta completato con successo.
- Fine del corpo della funzione main ().
Ridimensionamento degli array
La lunghezza di una matrice dinamica viene impostata durante il tempo di allocazione.
Tuttavia, 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, quindi cancellando il vecchio array.
Nota: questa tecnica è soggetta a errori, quindi cerca di evitarla.
Eliminazione dinamica di array
Un array dinamico dovrebbe essere cancellato dalla memoria del computer una volta raggiunto il suo scopo. L'istruzione delete può aiutarti a ottenere questo risultato. Lo spazio di memoria rilasciato 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 al termine del programma.
Nota:
Per eliminare un array dinamico dalla memoria del computer, è necessario utilizzare delete [] invece di delete. [] Indica alla CPU di eliminare più variabili invece di 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:
#includeusing 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:
Spiegazione del codice:
- Includere il file di intestazione iostream nel nostro programma per poter utilizzare le sue funzioni.
- Includere 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.
- Dichiara una variabile puntatore * arr. L'array arr riserverà un po 'di memoria per memorizzare un totale di n numeri interi.
- Stampa un messaggio sulla console che richiede all'utente di inserire n numeri.
- Crea un ciclo for e la variabile del ciclo x per scorrere i numeri inseriti dall'utente.
- Leggere i numeri inseriti dall'utente e memorizzarli nell'array arr.
- Fine del corpo del ciclo for.
- Stampa del testo sulla console.
- Usa un ciclo for e la variabile del ciclo x per iterare sul contenuto dell'array arr.
- Stampa i valori dell'array arr sulla console.
- Fine del corpo del ciclo for.
- Stampa una riga vuota sulla console.
- Libera la memoria dell'array arr.
- Il programma restituirà il valore una volta completato con successo.
- Fine del corpo della funzione main ().
Sommario:
- Gli array regolari hanno una dimensione fissa. Non è possibile modificare la loro dimensione una volta dichiarata.
- Con questi tipi di array, la dimensione della memoria viene determinata durante la fase di compilazione.
- Gli array dinamici sono diversi. Le loro dimensioni possono essere modificate durante il runtime.
- Negli array dinamici, la dimensione viene determinata durante il runtime.
- Gli array dinamici in C ++ vengono dichiarati utilizzando la nuova parola chiave.
- Usiamo le parentesi quadre per specificare il numero di elementi da memorizzare nell'array dinamico.
- Una volta terminato con l'array, possiamo liberare la memoria utilizzando l'operatore di cancellazione.
- Utilizzare l'operatore di cancellazione con [] per liberare la memoria di tutti gli elementi dell'array.
- Una cancellazione senza [] libera la memoria di un solo elemento.
- Non esiste un meccanismo integrato per ridimensionare gli array C ++.
- Per inizializzare un array utilizzando un inizializzatore di elenco, non utilizziamo l'operatore .