Un array è un tipo di struttura dati utilizzata per archiviare la raccolta di elementi dello stesso tipo di dati conservati in posizioni di memoria contigue. Gli array possono essere unidimensionali o multidimensionali in base al numero di direzioni in cui possono crescere. In questo articolo studieremo gli array multidimensionali come gli array bidimensionali e gli array tridimensionali.
Cos'è l'array multidimensionale in C++?
Un array multidimensionale è un array con più di una dimensione. È la raccolta omogenea di elementi in cui si accede a ciascun elemento utilizzando più indici.
Dichiarazione di array multidimensionale
datatype arrayName [ size1][size2]...[sizeN];>
Dove,
- tipo di dati: Tipo di dati da archiviare nell'array.
- nomearray: Nome della matrice.
- taglia1, taglia2,…, tagliaN: Dimensioni di ciascuna dimensione.
Esempio:
Two dimensional array: int two_d[2][4]; Three dimensional array: int three_d[2][4][8];>
Dimensione di un array multidimensionale
La dimensione di un array è uguale alla dimensione del tipo di dati moltiplicata per il numero totale di elementi che possono essere archiviati in un array. Possiamo calcolare il numero totale di elementi in un array moltiplicando la dimensione di ciascuna dimensione di un array multidimensionale.
Per esempio:
int arr1[2][4];>
- L'array int arr1[2][4] può memorizzare il totale (2*4) = 8 elementi.
- In C++ il tipo di dati int richiede 4 byte e abbiamo 8 elementi nell'array 'arr1' del tipo int.
- Dimensione totale = 4*8 = 32 byte .
int arr2[2][4][8];>
- Array int arr2[2][4][8] può memorizzare un totale (2*4*8) = 64 elementi.
- La dimensione totale di ' arr2 ' = 64*4 = 256 byte .
Per verificare il calcolo sopra possiamo usare taglia di() metodo per trovare la dimensione di un array.
C++
// C++ program to verify the size of multidimensional> // arrays> #include> using> namespace> std;> > int> main()> {> >// creating 2d and 3d array> >int> arr1[2][4];> >int> arr2[2][4][8];> > >// using sizeof() operator to get the size of the above> >// arrays> >cout <<>'Size of array arr1: '> <<>sizeof>(arr1)> ><<>' bytes'> << endl;> >cout <<>'Size of array arr2: '> <<>sizeof>(arr2)> ><<>' bytes'>;> > >return> 0;> }> |
>
Java principale
>Produzione
Size of array arr1: 32 bytes Size of array arr2: 256 bytes>
Gli array multidimensionali più utilizzati sono:
- Matrice bidimensionale
- Matrice tridimensionale
Array bidimensionale (o array 2D)
Un array bidimensionale in C++ è una raccolta di elementi organizzati in righe e colonne. Può essere visualizzato come una tabella o una griglia, in cui si accede a ciascun elemento utilizzando due indici: uno per la riga e uno per la colonna. Come un array unidimensionale, anche gli indici di array bidimensionali vanno da 0 a n-1 sia per le righe che per le colonne.

Sintassi dell'array 2D
tipo_dati nome_array[ N ][ M ];
Dove,
- N: Numero di righe.
- M: Numero di colonne.
Possiamo dichiarare un array 2D staticamente e dinamicamente. Nella dichiarazione statica, la memoria viene allocata durante la fase di compilazione e nella memoria dinamica viene allocata durante il runtime. Quanto sopra è la sintassi per la dichiarazione statica di un array 2D. Per sapere come dichiarare dinamicamente l'array 2d, fare riferimento a Questo articolo.
Inizializzazione di array bidimensionali in C++
Di seguito sono riportati diversi modi per inizializzare un array 2D:
stringhe a numeri interi
- Utilizzo dell'elenco degli inizializzatori
- Utilizzo dei loop
1. Inizializzare l'array 2D utilizzando l'elenco Inizializzatori
Possiamo inizializzare un array 2D utilizzando un elenco di inizializzatori in due modi. Di seguito è riportato il primo metodo per inizializzare un array 2D utilizzando un elenco di inizializzatori.
Primo metodo: La matrice seguente ha 2 righe e 4 colonne. Gli elementi vengono riempiti in modo tale che i primi 4 elementi siano riempiti nella prima riga e i successivi 4 elementi siano riempiti nella seconda riga.
int arr[2][4] = {0, 1, 2, 3, 4, 5, 6, 7};> Secondo metodo: Il modo seguente è il modo più semplice per inizializzare un array 2D: l'elenco nidificato rappresenta gli elementi in una riga e il numero di elementi al suo interno è uguale al numero di colonne in un array 2D. Il numero di elenchi nidificati rappresenta il numero di colonne.
int x[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};> 2. Inizializzazione dell'array 2D utilizzando Loops
Possiamo anche inizializzare l'array 2D utilizzando i loop. Per inizializzare l'array 2D dobbiamo utilizzare due cicli nidificati e i cicli nidificati sono uguali alla dimensione. Ad esempio, per inizializzare un array 3D dobbiamo utilizzare tre cicli nidificati. Vediamo un esempio.
Esempio: Nell'esempio seguente abbiamo inizializzato l'array 2D con 1. Il ciclo esterno viene utilizzato per tenere traccia delle righe i=0 significa la prima riga a causa dell'indicizzazione 0 in modo simile j=0 significa la prima colonna e combinando questo x [0][0] rappresenta la prima cella della matrice 2D.
int x[2][4]; for(int i = 0; i <2; i++){ for(int j = 0; j <4; j++){ x[i][j] = 1; } }> Accesso agli elementi di array bidimensionali in C++
Possiamo accedere agli elementi di un array bidimensionale utilizzando indici di riga e colonna. È simile alla posizione dell'elemento di matrice ma l'unica differenza è che qui l'indicizzazione inizia da 0.
Sintassi:
array_name[i][j];>
Dove,
intento intento
- io: Indice della riga.
- J: Indice della colonna.
Esempio: Di seguito è riportato l'indice degli elementi della seconda riga e della terza colonna.
int x[1][2];>
Comprendiamolo utilizzando il codice stampando elementi di un array 2D.
Esempio di matrice 2D
C++
// c++ program to illustrate the two dimensional array> #include> using> namespace> std;> > int> main()> {> > >int> count = 1;> > >// Declaring 2D array> >int> array1[3][4];> > >// Initialize 2D array using loop> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <4; j++) {> >array1[i][j] = count;> >count++;> >}> >}> > >// Printing the element of 2D array> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <4; j++) {> >cout << array1[i][j] <<>' '>;> >}> >cout << endl;> >}> > >return> 0;> }> |
>
>Produzione
cos'è GB
1 2 3 4 5 6 7 8 9 10 11 12>
Spiegazione: Nel codice sopra abbiamo inizializzato il conteggio con '1' e dichiarato un array 2D con 3 righe e 4 colonne, dopodiché abbiamo inizializzato l'array con il valore di conteggio e l'incremento del valore di conteggio in ogni iterazione del ciclo. Quindi stampiamo l'array 2D utilizzando un ciclo annidato e possiamo vedere nell'output seguente che ci sono 3 righe e 4 colonne.
Complessità temporale: O(n*m)
Complessità spaziale: O(n*m)
dove n è il numero di righe e m è il numero di colonne.
Array tridimensionale in C++
L'array 3D è una struttura dati che memorizza gli elementi in una struttura tridimensionale simile a un cuboide. Può essere visualizzato come una raccolta di più array bidimensionali impilati uno sopra l'altro. Ogni elemento in una matrice 3D è identificato dai suoi tre indici: indice di riga, indice di colonna e indice di profondità.

Dichiarazione di array tridimensionale in C++
Per dichiarare un array 3D in C++, dobbiamo specificare la sua terza dimensione insieme alle dimensioni 2D.
Sintassi:
dataType arrayName[d][r];>
- tipo di dati: Tipo di dati da memorizzare in ciascun elemento.
- nomearray: Nome della matrice
- D: Numero di array 2D o profondità dell'array.
- R: Numero di righe in ciascuna matrice 2D.
- C: Numero di colonne in ciascuna matrice 2D.
Esempio:
int array[3][5][2];>
Inizializzazione di array tridimensionali in C++
Per inizializzare l'array 3D in C++, seguiamo gli stessi metodi che abbiamo utilizzato per inizializzare l'array 2D. Nell'array 3D, abbiamo una dimensione in più, quindi dobbiamo aggiungere un altro elenco di elementi nidificati.
Un array 3D in C può essere inizializzato utilizzando:
- Elenco degli inizializzatori
- Loop
Inizializzazione dell'array 3D utilizzando l'elenco degli inizializzatori
Metodo 1: In questo metodo, dobbiamo scrivere il numero totale di elementi tra parentesi graffe e ogni elemento viene posizionato nella sua posizione in base alla dimensione data.
int x[3][5][2] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30};> Metodo 2 (migliore) : In questo metodo abbiamo partizionato gli elementi utilizzando elenchi nidificati ed è facile da leggere.
int x[3][5][2] = { { {0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9} } , { {10, 11}, {12, 13}, {14, 15}, {16, 17}, {18, 19} } , { {20, 21}, {22, 23}, {24, 25}, {26, 27}, {28, 30} } , } ;> Inizializzazione dell'array 3D utilizzando i loop
Questo metodo è uguale all'inizializzazione di un array 2D utilizzando i cicli con un ulteriore ciclo nidificato per la terza dimensione.
int x[3][5][2]; for (int i = 0; i <3; i++) { for (int j = 0; j <5; j++) { for (int k = 0; k <2; k++) { x[i][j][k] = (some_value) ; } } }> Accesso agli elementi nell'array tridimensionale in C++
Accedere agli elementi negli array 3D è semplice come accedere agli elementi negli array 2D. Qui quello che dobbiamo fare è aggiungere un ulteriore ciclo annidato per tenere traccia della terza dimensione.
C++
// C++ program to illustrate the 3d array> #include> using> namespace> std;> > int> main()> {> > >int> count = 0;> >// declaring 3d array> >int> x[2][2][3];> > >// initializing the array> >for> (>int> i = 0; i <2; i++) {> >for> (>int> j = 0; j <2; j++) {> >for> (>int> k = 0; k <3; k++) {> >x[i][j][k] = count;> >count++;> >}> >}> >}> > >// printing the array> >for> (>int> i = 0; i <2; i++) {> >for> (>int> j = 0; j <2; j++) {> >for> (>int> k = 0; k <3; k++) {> >printf>(>'x[%d][%d][%d] = %d
'>, i, j, k,> >x[i][j][k]);> >count++;> >}> >}> >}> > >return> 0;> }> |
>
differenze in Python
>Produzione
x[0][0][0] = 0 x[0][0][1] = 1 x[0][0][2] = 2 x[0][1][0] = 3 x[0][1][1] = 4 x[0][1][2] = 5 x[1][0][0] = 6 x[1][0][1] = 7 x[1][0][2] = 8 x[1][1][0] = 9 x[1][1][1] = 10 x[1][1][2] = 11>
Spiegazione: Nel codice precedente, abbiamo inizializzato l'array 3D utilizzando il ciclo come spiegato sopra con il numero da 0 a 7 utilizzando la variabile count e quindi accedendo agli elementi utilizzando lo stesso ciclo utilizzato per inizializzare l'array 3D. L'unica differenza è che invece di assegnare un elemento in una posizione particolare si dice x[0][0][1]=1 stiamo stampando l'elemento memorizzato in quella posizione come mostrato nell'output seguente.