C++ Gli Array

Lezione#05 Benvenuti al corso C++ in 11 Passi, in questa lezione vedremo come manipolare gli Array.
Un array è una variabile contenente un riferimento ad un’area di memoria, al cui interno vi sono dei dati. Gli elementi di un array hanno una posizione all’interno dello stesso, che è definita come indice, in particolare il primo elemento ha un indice che parte dal valore 0 –> zero-based index . In C++ gli array sono sequenziali e possono contenere elementi appartenenti ad uno stesso tipo.
Pertanto, assodato che un array è una variabile speciale che contiene diversi valori di uno stesso tipo, passiamo ad un primo esempio.
#include <iostream> using namespace std; int main(){ string names[10]; int numbers[100]; }
Abbiamo dichiarato un array (names) di 10 elementi di tipo stringa e un array (numbers) di 100 interi. Pertanto i nostri array avranno tutti elementi del tipo dichiarato al proprio interno. Passiamo al secondo esempio:
#include <iostream> using namespace std; int main(){ int numbers[6] = {1, 2, 3, 4, 5, 6, 7}; string names[] = {"ET", "Elliot", "Mr. Robot"}; }
In questo caso entrambi gli array sono stati dichiarati nonché inizializzati! Si noti che nel caso del secondo array, names, esso viene inizializzato senza dargli la dimensione: in tal caso assumerà una lunghezza pari al numero di elementi che gli assegnate.
Vediamo quindi come visualizzare a schermo gli elementi di un array:
#include <iostream> using namespace std; int main(){ string names[3]; names[0] = "ET"; names[1] = "Elliot"; names[2] = "Mr. Robot"; cout << names[1]; }
Mr. Robot
Come precisato all’inizio di questa lezione, un array è zero-based e quindi si inizia a contare dalla posizione 0. All’interno delle parentesi quadre gli passiamo l’indice dell’elemento a cui vogliamo accedere. In altre parole l’indice è la posizione dell’elemento all’interno dell’array.
In C++ gli array sono modificabili:
#include <iostream> using namespace std; int main(){ string names[3] = {"ET", "Elliot", "Mr. Robot"}; names[2] = "Gertie"; cout << names[2]; }
Gertie
Per modificare un valore, basta accedere all’elemento specificandone l’indice e la nuova assegnazione.
Ragioniamo ora sulle dimensioni in memoria della variabili. La funzione sizeof() è utile per restituire il numero di bytes di un array o, se vogliamo, il numero di elementi contenuti in esso.
#include <iostream> using namespace std; int main(){ int n[5] = {46, 8, 10, 28, 6}; int n_size = sizeof(n); int ele_size = sizeof(n[0]); int elements = n_size / ele_size; cout << "dimensione di n: " << n_size << endl; cout << "dimensione singolo elemento di n: " << ele_size << endl; cout << "numero di elementi di n: " << elements; }
dimensione di n: 20
dimensione singolo elemento di n: 4
numero di elementi di n: 5
Wow! Un po’ di calcoli finalmente. Allora, la dimensione dell’array n risulta di 20 bytes, questo perchè ogni intero pesa 4 bytes. Infatti sizeof(n[0]) ci dà anche la dimensione di un singolo elemento. Dividendo la dimensione totale dell’array per la dimensione del singolo elemento, otteniamo il numero di elementi.
Vediamo ora cosa accade se proviamo a fare altre operazioni che riguardano la dimensione dell’array:
#include <iostream> using namespace std; int main(){ string n[3] = {1, 10, 100}; n[3] = 1000; cout << n[3]; }
1000
In quest’ultimo esempio, è evidente l’errore di indicizzazione, nonostante si riesca a stampare a video il quarto elemento del vettore n. Infatti c’è da sottolineare che, anche se sintatticamente corretto è sconsigliato operare in questo modo per una questione di allocazione della memoria: potrebbe esservi perdita di dati (discuteremo di questi dettagli nella lezione dedicata ai puntatori).
In ultima analisi vediamo come lavorare con le matrici:
#include <iostream> using namespace std; int main(){ int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; cout << matrix[1][1]; }
5
Una matrice è un array bidimensionale, la dichiariamo inserendo tra parantesi quadre il numero di righe e il numero di colonne della matrice. Pertanto matrix[0][2] corrisponderà al numero 3, mentre matrix[1][0] conterrà il numero 4 e così via.
Ritorna alla precedente <– []–> Vai alla successiva