logo

Večdimenzionalna matrika C++

Niz je vrsta podatkovne strukture, ki se uporablja za shranjevanje zbirke istih elementov podatkovnega tipa, ki se hranijo na sosednjih pomnilniških lokacijah. Nizi so lahko enodimenzionalni ali večdimenzionalni glede na število smeri, v katere lahko raste niz. V tem članku bomo preučevali večdimenzionalne nize, kot so dvodimenzionalni nizi in tridimenzionalni nizi.

Kaj je večdimenzionalna matrika v C++?

Večdimenzionalni niz je niz z več kot eno dimenzijo. Je homogena zbirka postavk, kjer je do vsakega elementa dostopno z uporabo več indeksov.



Deklaracija večdimenzionalne matrike

  datatype     arrayName    [    size1][size2]...[sizeN];>

kje,

  • podatkovni tip: Vrsta podatkov, ki bodo shranjeni v matriki.
  • arrayName: Ime matrike.
  • velikost1, velikost2,…, velikostN: Velikost vsake dimenzije.

primer:

Two dimensional array: int two_d[2][4]; Three dimensional array: int three_d[2][4][8];>

Velikost večdimenzionalne matrike

Velikost matrike je enaka velikosti podatkovnega tipa, pomnoženi s skupnim številom elementov, ki jih je mogoče shraniti v matriko. Skupno število elementov v matriki lahko izračunamo tako, da pomnožimo velikost vsake dimenzije večdimenzionalne matrike.



Na primer:

int arr1[2][4];>
  • Matrika int arr1[2][4] lahko shrani skupno (2*4) = 8 elementi.
  • V C++ podatkovni tip int zajema 4 bajte in imamo 8 elementov v matriki 'arr1' tipa int.
  • Skupna velikost = 4*8 = 32 bajtov .
int arr2[2][4][8];>
  • Array int arr2[2][4][8] lahko shrani skupno (2*4*8) = 64 elementov.
  • Skupna velikost ' arr2 ' = 64*4 = 256 bajtov .

Za potrditev zgornjega izračuna lahko uporabimo sizeof() metoda za iskanje velikosti matrike.

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;> }>

turbo c++ prenos

>

>

Izhod

Size of array arr1: 32 bytes Size of array arr2: 256 bytes>

Najbolj razširjeni večdimenzionalni nizi so:

  • Dvodimenzionalni niz
  • Tridimenzionalni niz

Dvodimenzionalni niz (ali 2D niz)

Dvodimenzionalni niz v C++ je zbirka elementov, organiziranih v vrsticah in stolpcih. Vizualizirati ga je mogoče kot tabelo ali mrežo, kjer je do vsakega elementa dostopno z uporabo dveh indeksov: enega za vrstico in enega za stolpec. Tako kot pri enodimenzionalni matriki se tudi dvodimenzionalni indeksi matrike gibljejo od 0 do n-1 za vrstice in stolpce.

dvodimenzionalna matrična organizacija v c++

Sintaksa 2D polja

data_Type ime_matrike [ n ][ m ];

Kje,

  • n: Število vrstic.
  • m: Število stolpcev.

2D niz lahko deklariramo statično in dinamično. Pri statični deklaraciji se pomnilnik dodeli med časom prevajanja, pri dinamičnem pomnilniku pa med izvajanjem. Zgoraj je sintaksa za statično deklaracijo 2D polja. Če želite izvedeti, kako dinamično deklarirati matriko 2d, glejte to Članek.

Inicializacija dvodimenzionalnih nizov v C++

Spodaj so podani različni načini inicializacije 2D polja:

  • Uporaba seznama inicializatorjev
  • Uporaba zank

1. Inicializirajte 2D polje s seznamom inicializatorjev

2D matriko lahko inicializiramo s seznamom inicializatorjev na dva načina. Spodaj je prva metoda inicializacije 2D polja z uporabo seznama inicializatorjev.

Prva metoda: Spodnji niz ima 2 vrstici in 4 stolpce. Elementi so zapolnjeni tako, da se prvi 4 elementi zapolnijo v prvi vrstici in naslednji 4 elementi se zapolnijo v drugi vrstici.

delni derivat simbol lateks
int arr[2][4] = {0, 1, 2, 3, 4, 5, 6, 7};>

Druga metoda: Spodnji način je čistejši način inicializacije 2D-matrike, saj ugnezdeni seznam predstavlja elemente v vrstici, število elementov v njem pa je enako številu stolpcev v 2D-matriki. Število ugnezdenih seznamov predstavlja število stolpcev.

int x[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};>

2. Inicializacija 2D polja z uporabo zank

2D niz lahko inicializiramo tudi z uporabo zank. Za inicializacijo 2D matrike moramo uporabiti dve ugnezdeni zanki in ugnezdeni zanki sta enaki dimenziji. Na primer, za inicializacijo 3D-matrike moramo uporabiti tri ugnezdene zanke. Poglejmo primer.

primer: V spodnjem primeru smo 2D matriko inicializirali z 1. Zunanja zanka se uporablja za sledenje vrsticam i=0 pomeni prvo vrstico zaradi indeksiranja 0 na podoben način j=0 pomeni prvi stolpec in združevanje tega x [0][0] predstavlja prvo celico 2D polja.

int x[2][4]; for(int i = 0; i <2; i++){  for(int j = 0; j <4; j++){  x[i][j] = 1;  } }>

Dostop do elementov dvodimenzionalnih nizov v C++

Do elementov 2-dimenzionalne matrike lahko dostopamo z uporabo indeksov vrstic in stolpcev. Podobno je položaju elementa matrike, vendar je edina razlika v tem, da se tu indeksiranje začne od 0.

Sintaksa:

array_name[i][j];>

kje,

  • jaz: Indeks vrstice.
  • j: Indeks stolpca.

primer: Spodaj je kazalo elementov druge vrstice in tretjega stolpca.

int x[1][2];>

Razumejmo to z uporabo kode s tiskanjem elementov 2D polja.

Primer 2D polja

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;> }>

>

>

Izhod

1 2 3 4 5 6 7 8 9 10 11 12>

Pojasnilo: V zgornji kodi smo inicializirali štetje z '1' in deklarirali 2D matriko s 3 vrsticami in 4 stolpci, potem pa smo inicializirali matriko z vrednostjo štetja in povečali vrednost štetja v vsaki ponovitvi zanke. Nato natisnemo 2D matriko z uporabo ugnezdene zanke in v spodnjem izpisu lahko vidimo, da so 3 vrstice in 4 stolpci.

Časovna zapletenost: O(n*m)
Kompleksnost prostora: O(n*m)

kjer je n število vrstic in m število stolpcev.

Tridimenzionalna matrika v C++

3D niz je podatkovna struktura, ki shranjuje elemente v tridimenzionalni strukturi, podobni kvadru. Lahko si ga predstavljamo kot zbirko več dvodimenzionalnih nizov, ki so zloženi drug na drugega. Vsak element v 3D-matriki je identificiran s tremi indeksi: indeksom vrstice, indeksom stolpca in indeksom globine.

tridimenzionalna matrična organizacija v c++

Deklaracija tridimenzionalne matrike v C++

Za deklaracijo 3D-matrike v C++ moramo podati njeno tretjo dimenzijo skupaj z 2D-dimenzijami.

Sintaksa:

dataType arrayName[d][r];>
  • dataType: Vrsta podatkov, ki bodo shranjeni v vsakem elementu.
  • arrayName: Ime matrike
  • d: Število 2D nizov ali globina nizov.
  • r: Število vrstic v vsakem 2D nizu.
  • c: Število stolpcev v vsaki 2D matriki.

primer:

int array[3][5][2];>

Inicializacija tridimenzionalne matrike v C++

Za inicializacijo 3D-matrike v C++ sledimo istim metodam, kot smo jih uporabili za inicializacijo 2D-matrike. V 3D nizu imamo še eno dimenzijo, zato moramo dodati še en ugnezdeni seznam elementov.

3D niz v C je mogoče inicializirati z uporabo:

  1. Seznam inicializatorjev
  2. Zanke

Inicializacija 3D matrike s seznamom inicializatorjev

1. način: Pri tej metodi moramo zapisati skupno število elementov znotraj zavitih oklepajev, vsak element pa je postavljen na svoje mesto glede na dano dimenzijo.

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};>

2. način (boljši) : Pri tej metodi smo elemente razdelili z uporabo ugnezdenih seznamov in je lahko berljiva.

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}   }  ,    }  ;>

Inicializacija 3D polja z uporabo zank

Ta metoda je enaka inicializaciji 2D matrike z uporabo zank z eno dodatno ugnezdeno zanko za tretjo dimenzijo.

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)  ;  }  } }>

Dostop do elementov v tridimenzionalnem nizu v C++

Dostop do elementov v 3D nizih je tako preprost kot dostop do elementov v 2D nizih. Tu se moramo dodatno potruditi, da dodamo še eno ugnezdeno zanko, da sledimo tretji dimenziji.

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;> }>

>

>

Izhod

matrični seznam java
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>

Pojasnilo: V zgornji kodi smo inicializirali 3D-matriko s pomočjo zanke, kot je razloženo zgoraj, s številkami od 0 do 7 z uporabo spremenljivke štetja in nato z dostopom do elementov z uporabo iste zanke, uporabljene za inicializacijo 3D-matrike. Edina razlika je v tem, da namesto dodelitve elementa na določen položaj recimo x[0][0][1]=1 natisnemo element, shranjen na tej lokaciji, kot je razvidno iz spodnjega izpisa.