logo

C++ daugiamatis masyvas

Masyvas yra duomenų struktūros tipas, naudojamas saugoti to paties duomenų tipo elementų rinkinį, saugomą gretimose atminties vietose. Masyvai gali būti vienmačiai arba daugiamačiai, atsižvelgiant į krypčių, kuriomis masyvas gali augti, skaičių. Šiame straipsnyje mes išnagrinėsime daugiamačius masyvus, tokius kaip dvimačiai masyvai ir trimačiai masyvai.

Kas yra daugiamatis masyvas C++?

Daugiamatis masyvas yra masyvas, turintis daugiau nei vieną matmenį. Tai vienalytis elementų rinkinys, kuriame kiekvienas elementas pasiekiamas naudojant kelis indeksus.

Daugiamatis masyvo deklaracija

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

kur,



  • duomenų tipas: Duomenų, kurie turi būti saugomi masyve, tipas.
  • masyvo pavadinimas: Masyvo pavadinimas.
  • 1 dydis, 2 dydis,…, dydisN: Kiekvieno matmens dydis.

Pavyzdys:

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

Daugiamačio masyvo dydis

Masyvo dydis lygus duomenų tipo dydžiui, padaugintam iš bendro elementų, kuriuos galima saugoti masyve, skaičiaus. Bendrą masyvo elementų skaičių galime apskaičiuoti padauginę kiekvieno daugiamačio masyvo matmens dydį.

Pavyzdžiui:

int arr1[2][4];>
  • Masyvas tarpt arr1[2][4] gali saugoti iš viso (2*4) = 8 elementai.
  • C++ int duomenų tipas užima 4 baitus, o masyve turime 8 elementus 'arr1' int tipo.
  • Bendras dydis = 4*8 = 32 baitai .
int arr2[2][4][8];>
  • Masyvo tarpt arr2[2][4][8] gali saugoti viso (2*4*8) = 64 elementus.
  • Bendras dydis ' arr2 ' = 64*4 = 256 baitai .

Norėdami patikrinti aukščiau pateiktą skaičiavimą, galime naudoti dydis() būdas rasti masyvo dydį.

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

>

>

Išvestis

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

Plačiausiai naudojami daugiamačiai masyvai yra šie:

  • Dviejų dimensijų masyvas
  • Trimatis masyvas

Dviejų dimensijų masyvas (arba 2D masyvas)

Dvimatis masyvas C++ yra elementų, suskirstytų į eilutes ir stulpelius, rinkinys. Jį galima vizualizuoti kaip lentelę arba tinklelį, kur kiekvienas elementas pasiekiamas naudojant du indeksus: vieną eilutei ir vieną stulpeliui. Kaip ir vienmačio masyvo, dvimačio masyvo indeksai ir eilučių, ir stulpelių svyruoja nuo 0 iki n-1.

dviejų dimensijų masyvo organizavimas c++

2D masyvo sintaksė

duomenų_tipo masyvo_pavadinimas[ n ][ m ];

kur,

  • n: Eilučių skaičius.
  • m: Stulpelių skaičius.

2D masyvą galime deklaruoti statiškai ir dinamiškai. Statinėje deklaracijoje atmintis paskirstoma kompiliavimo metu, o dinaminėje atmintyje – vykdymo metu. Aukščiau pateikta 2D masyvo statinės deklaracijos sintaksė. Norėdami sužinoti, kaip dinamiškai deklaruoti 2d masyvą, žr tai straipsnis.

Dvimačių masyvų inicijavimas C++

Toliau pateikiami įvairūs 2D masyvo inicijavimo būdai:

  • Initializatorių sąrašo naudojimas
  • Naudojant kilpas

1. Inicijuokite 2D masyvą naudodami Initializer sąrašą

2D masyvą galime inicijuoti naudodami inicijavimo sąrašą dviem būdais. Žemiau pateikiamas pirmasis 2D masyvo inicijavimo būdas naudojant inicijatorių sąrašą.

Pirmasis metodas: Žemiau esančiame masyve yra 2 eilutės ir 4 stulpeliai. Elementai užpildomi taip, kad pirmieji 4 elementai būtų užpildyti pirmoje eilutėje, o kiti 4 elementai – antroje eilutėje.

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

Antrasis metodas: Toliau pateiktas būdas yra švaresnis būdas inicijuoti 2D masyvą. Įdėtasis sąrašas vaizduoja elementus eilutėje, o elementų skaičius jame yra lygus 2D masyvo stulpelių skaičiui. Įdėtų sąrašų skaičius rodo stulpelių skaičių.

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

2. 2D masyvo inicijavimas naudojant kilpas

Taip pat galime inicijuoti 2D masyvą naudodami kilpas. Norėdami inicijuoti 2D masyvą, turime naudoti dvi įdėtas kilpas ir įdėtos kilpos yra lygios matmeniui. Pavyzdžiui, norėdami inicijuoti 3D masyvą, turime naudoti tris įdėtas kilpas. Pažiūrėkime pavyzdį.

Pavyzdys: Toliau pateiktame pavyzdyje mes inicijuojame 2D masyvą su 1. Išorinė kilpa naudojama sekti eilutes i=0 reiškia pirmąją eilutę, nes 0 indeksuoja panašiai j=0 reiškia pirmąjį stulpelį ir sujungia šį x [0][0] reiškia pirmąją 2D masyvo langelį.

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

Prieiga prie dvimačių masyvų elementų C++

Dvimačio masyvo elementus galime pasiekti naudodami eilučių ir stulpelių indeksus. Tai panašu į matricos elemento padėtį, tačiau vienintelis skirtumas yra tas, kad čia indeksavimas prasideda nuo 0.

python arba

Sintaksė:

array_name[i][j];>

kur,

  • aš: Eilutės rodyklė.
  • j: Stulpelio rodyklė.

Pavyzdys: Žemiau yra antros eilutės ir trečiojo stulpelio elementų rodyklė.

int x[1][2];>

Supraskime tai naudodami kodą spausdindami 2D masyvo elementus.

2D masyvo pavyzdys

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

>

>

Išvestis

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

Paaiškinimas: Aukščiau pateiktame kode skaičiavimą inicijavome „1“ ir paskelbėme 2D masyvą su 3 eilutėmis ir 4 stulpeliais, po to inicijavome masyvą su skaičiaus reikšme ir skaičiaus prieaugio reikšme kiekvienoje ciklo iteracijoje. Tada mes spausdiname 2D masyvą naudodami įdėtą kilpą ir žemiau esančioje išvestyje matome, kad yra 3 eilutės ir 4 stulpeliai.

Laiko sudėtingumas: O(n*m)
Erdvės sudėtingumas: O(n*m)

kur n yra eilučių skaičius, o m yra stulpelių skaičius.

Trimatis masyvas C++

3D masyvas yra duomenų struktūra, kurioje elementai saugomi trimatėje kuboidinėje struktūroje. Jį galima įsivaizduoti kaip kelių dvimačių masyvų, sukrautų vienas ant kito, rinkinį. Kiekvienas 3D masyvo elementas identifikuojamas pagal tris jo indeksus: eilutės indeksą, stulpelio indeksą ir gylio indeksą.

trijų dimensijų masyvo organizavimas c++

Trimačio masyvo deklaracija C++

Norėdami deklaruoti 3D masyvą C++, turime nurodyti trečiąjį jo matmenį kartu su 2D matmenimis.

Sintaksė:

dataType arrayName[d][r];>
  • duomenų tipas: Kiekviename elemente saugomų duomenų tipas.
  • masyvo pavadinimas: Masyvo pavadinimas
  • d: 2D matricų skaičius arba masyvo gylis.
  • r: Eilučių skaičius kiekviename 2D masyve.
  • c: Stulpelių skaičius kiekviename 2D masyve.

Pavyzdys:

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

Trimačio masyvo inicijavimas C++

Norėdami inicijuoti 3D masyvą C++, taikome tuos pačius metodus, kuriuos naudojome inicijuodami 2D masyvą. 3D masyve turime dar vieną dimensiją, todėl turime pridėti dar vieną įdėtą elementų sąrašą.

C 3D masyvą galima inicijuoti naudojant:

  1. Iniciatorių sąrašas
  2. Kilpos

3D masyvo inicijavimas naudojant inicijavimo sąrašą

1 būdas: Taikant šį metodą, mes turime įrašyti bendrą elementų skaičių garbanotuose skliaustuose ir kiekvienas elementas dedamas į savo vietą pagal pateiktą matmenį.

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 metodas (geresnis) : Taikant šį metodą, mes suskirstėme elementus naudodami įdėtus sąrašus ir jį lengva perskaityti.

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

3D masyvo inicijavimas naudojant kilpas

Šis metodas yra toks pat kaip 2D masyvo inicijavimas naudojant kilpas su dar viena įdėta kilpa trečiajam matmeniui.

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

Prieiga prie trijų dimensijų elementų C++

Prieiga prie elementų 3D matricose yra taip pat paprasta, kaip ir prie 2D matricų elementų. Čia turime atlikti papildomą darbą – pridėti dar vieną įdėtą kilpą, kad galėtume sekti trečiąjį aspektą.

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

>

>

Jungtinių Valstijų kiek miestų
Išvestis

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>

Paaiškinimas: Aukščiau pateiktame kode inicijavome 3D masyvą naudodami kilpą, kaip paaiškinta aukščiau, su skaičiumi nuo 0 iki 7, naudodami skaičiavimo kintamąjį, tada pasiekėme elementus naudodami tą pačią kilpą, naudojamą 3D masyvo inicijavimui. Vienintelis skirtumas yra tas, kad vietoj elemento priskyrimo tam tikroje padėtyje sakykite x[0][0][1]=1 spausdiname toje vietoje saugomą elementą, kaip matyti toliau pateiktoje išvestyje.