Začnimo torej z razlikami med enim in dvema dimenzijama ter primerjalno tabelo.
Tabela za primerjavo:
Podlaga za primerjavo | Enodimenzijska | Dvodimenzionalna |
---|---|---|
Osnovno | Shranite en seznam elementov podobnega tipa podatkov. | Shranite "seznam seznamov" ali "niz nizov" ali "niz enodimenzionalnih polj". |
Deklaracija | / * izjava v jeziku C ++ vpišite ime_ spremenljivke [velikost]; * / / * deklaracija v Javi vpišite ime_ spremenljivke []; ime_ spremenljivke = nov tip [velikost]; * / | / * izjava v jeziku C ++ tip ime_ spremenljivke [velikost1] [velikost2]; * / / * deklaracija v Javi vpišite variable_name = new int [size1] [size2]; * / |
Alternativna deklaracija | / * V Javi int [] a = novo int [10]; * / | / * V Javi int [] [] a = novo int [10] [20]; * / |
Skupna velikost v bajtih | Skupni bajtov = velikost (tip podatkovne spremenljivke) * velikost matrike. | Skupni bajti = velikost (tip podatkov spremenljivke) * velikost prvega indeksa * velikost drugega indeksa. |
Sprejemni parameter | Lahko ga prejmete v kazalcu, velikem polju ali nesimetrični matriki. | Sprejem parametra mora definirati skrajno desno dimenzijo matrike. |
Dimenzije | Enodimenzionalno. | Dvodimenzionalno. |
Opredelitev enodimenzijske matrike (matrika 1-D)
Enodimenzijska ali enodimenzijska matrika se šteje za "seznam spremenljivk podobnih podatkovnih tipov", do vsake spremenljivke pa je mogoče dostopati z natančno določitvijo indeksa v oglatih oklepajih, pred katerim je ime tega polja.
Poglejmo v kontekstu C + +
// deklaracija v C ++ tipu spremenljivke [velikost];
Tukaj tip razglasi podatkovni tip spremenljivke polja, velikost pa določa število elementov, ki jih bo polje imelo.
Na primer, če želimo razglasiti matriko, ki bo vsebovala stanje vsakega meseca v letu.
// primer int mesec_balance [12];
Mesec _balance je spremenljivka niza, ki bo vsebovala 12 celih števil, ki predstavljajo bilanco vsakega meseca. Zdaj, če želimo dostopati do stanja meseca „April“, moramo preprosto omeniti ime spremenljivke, ki mu sledi oglati oklepaj, ki vsebuje vrednost indeksa za mesec april, tj. „Mesec_balance“ [3]. Toda kot »april« je četrti mesec v letu, vendar smo omenili »[3]«, ker imajo vsi nizi 0 indeks kot njihov prvi element.
V Javi je to mogoče storiti kot
// deklaracija v Java tipu spremenljivke []; ime_ spremenljivke = nov tip [velikost];
Tu smo najprej razglasili spremenljivko niza s svojim tipom in potem smo ji dodelili pomnilnik z uporabo 'new' in dodeli 'novo' deklarirani spremenljivki niza. Vzemimo zgornji primer, če želimo razglasiti polje, ki bo vsebovalo stanje v vsakem mesecu leta.
// primer int mesec_balance []; month_balance = novo int [12];
Tukaj 'new' dodeli pomnilnik spremenljivki niza 'month_balance', tako da bo zdaj mont_balance zdaj shranil pomnilnik za 12 celoštevilskih vrednosti.
Nizi se lahko inicializirajo, ko so deklarirani. Inicializator matrike je seznam vrednosti, ločenih z vejicami, ki so obdane z zavitimi oklepaji.
// na primer
int month_balance = {100, 500, 200, 750, 850, 250, 630, 248, 790, 360, 450, 180};
Opredelitev dvodimenzionalnega polja (2-D matrika)
Oba C ++ in Java podpirata večdimenzionalno polje. Ena od najpreprostejših oblik večdimenzionalnega polja je dvodimenzionalna matrika ali 2-D matrika. Dvodimenzijsko polje se lahko šteje za "niz nizov" ali "niz enodimenzionalnih polj". Za razglasitev dvodimenzionalne spremenljivke niza moramo podati ime polja, ki mu sledita dve oglati oklepaji, pri čemer je drugi indeks drugi niz oglatih oklepajev.
Dvodimenzionalna matrika je shranjena v obliki matrike vrstic-stolpcev, kjer prvi indeks označuje vrstico, drugi indeks pa stolpec. Drugi ali najbolj desni indeks polja se zelo hitro spremeni v primerjavi s prvim ali levim indeksom, medtem ko dostopa do elementov matrike.
// deklaracija v C ++ tipu spremenljivke [size1] [size2];
Na primer, želimo shraniti stanje na vsakih 30 dni v vsakem mesecu leta v 2-D matriki.
// primer int mesec_balance [12] [30];
V Javi je dvodimenzionalna matrika pridobljena z
// deklaracija v Java tip spremenljivke = novo int [velikost1] [velikost2]; // primer int mesec_balance = novo int [12] [30];
Ker ne moremo prenesti celotnega niza kot parametra na funkcijo, se posreduje kazalec na prvi element matrike. Argument, ki sprejema dvodimenzionalno polje, mora določiti, da je dimenzija desna. Najmanjša dimenzija je potrebna, ker jo potrebuje prevajalnik, da potrdi dolžino vsake vrstice, če želi indeks pravilno nastaviti. Če indeks največje desnice ni omenjen, prevajalnik ne more določiti, kje se začne naslednja vrstica.
// primer v Java void receiveing_funct (int a [] [10]) {. . . }
Ko je pomnilnik dinamično dodeljen dvodimenzionalnemu nizu v Javi, je naveden levi indeks, preostale dimenzije pa se lahko dodelijo ločeno, tj. Vse vrstice matrike ne smejo biti enake velikosti.
// primer v Java int month_balance = novo int [12] []; month_balance [0] = novo int [31]; month_balance [1] = novo int [28]; month_balance [2] = novo int [31]; month_balance [3] = novo int [30]; month_balance [4] = novo int [31]; month_balance [5] = novo int [30]; month_balance [6] = novo int [31]; month_balance [7] = novo int [30]; month_balance [8] = novo int [31]; month_balance [9] = novo int [30]; month_balance [10] = novo int [31]; month_balance [11] = novo int [30]; month_balance [12] = novo int [31];
Vendar pa tega ni.
Ključne razlike med enodimenzionalno in dvodimenzionalno matriko
- Enodimenzionalna matrika je seznam, katerega elementi so podobnega tipa podatkov. Po drugi strani pa je dvodimenzionalna matrika seznam, katerega elementi so matrika podobnega tipa podatkov.
- V C ++, ko enodimenzionalno polje prejme parameter sprejemne funkcije, ni treba omenjati velikosti matrike, saj prevajalnik razume, da je matrika vrste (omenjeni tip podatkov skupaj z parametrom) z nekaj dolžine. je treba prejeti. V dvodimenzionalnem nizu je treba določiti drugi ali desni indeks, saj mora prevajalnik vedeti, kje se konča ena vrstica in se začne nova vrstica.
- V C ++ je enodimenzionalna matrika shranjena v sosednji pomnilniški lokaciji v indeksiranem vrstnem redu, medtem ko je dvodimenzionalna matrika shranjena tudi v sosednji pomnilniški lokaciji, toda ker je v dvodimenzionalnem nizu več vrstic, je shranjevanje prvi vrsti sledi drugi in tretji in tako naprej.
Opomba:
Prehod obeh, enodimenzionalnega niza kot tudi dvodimenzionalnega polja v funkcijo, je podoben, tj. Oba sta posredovana le z imenom polja
// na primer prelaz_funt (name_of_array);
Sklep:
V obeh enodimenzionalnih in dvodimenzionalnih matrikah indeks igra zelo pomembno vlogo, ker je edina stvar, ki specifično identificira element v matriki. Tako enodimenzionalno kot tudi dvodimenzionalno polje se lahko inicializirajo v času njihove izjave.