Kaj je matrika?
Matrika je podatkovna struktura, ki zaporedno shrani element istega podatkovnega tipa. Matrika C ++ ima določeno velikost.
Polje lahko vidite kot zbirko spremenljivk podobnega podatkovnega tipa. Namesto da deklarirate vsako spremenljivko in ji dodelite vrednost posamezno, lahko prijavite eno spremenljivko (matriko) in ji dodate vrednosti različnih spremenljivk. Vsaka dodana vrednost matriki je označena z indeksom.
V tej vadnici C ++ boste izvedeli:
- Kaj je matrika?
- Zakaj potrebujemo polja?
- Prijavite matriko v jeziku C ++
- Inicializacija matrike
- Vrste nizov
- Enodimenzionalno polje
- Večdimenzionalno polje
- Dvodimenzionalna matrika
- Tridimenzionalno polje
- Kazalec na polje
- Dostop do vrednosti polja
- Prednosti matrike v jeziku C ++
- Slabosti matrike v jeziku C ++
Zakaj potrebujemo polja?
Polja so zelo pomembna v katerem koli programskem jeziku. Omogočajo bolj priročen način shranjevanja spremenljivk ali zbirke podatkov podobnega podatkovnega tipa skupaj, namesto da bi jih shranili ločeno. Do vsake vrednosti polja bomo dostopali ločeno.
Prijavite matriko v jeziku C ++
Deklaracija matrike v jeziku C ++ vključuje navedbo vrste in števila elementov, ki jih bo matrika shranila. Sintaksa:
type array-Name [ array-Size ];
Pravila za razglasitev enodimenzionalne matrike v jeziku C ++.
- Tip: vrsta je vrsta elementov, ki se shranijo v matriko, in mora biti veljaven podatkovni tip C ++.
- Array-Name: Array-Name je ime, ki se dodeli matriki.
- Velikost polja: Velikost polja je število elementov, ki jih je treba shraniti v matriko. Biti mora celo število in večje od 0.
Na primer, lahko ustvarite matriko z imenom starost in shranite starost 5 študentov, kot sledi:
int age[5];
V starosti matrike bo shranjenih 5 celih števil, ki predstavljajo starost različnih študentov.
Inicializacija matrike
Inicializacija matrike je postopek dodelitve / shranjevanja elementov matriki. Inicializacija se lahko izvede v enem stavku ali posamezno. Upoštevajte, da je prvi element v matriki shranjen pod indeksom 0, zadnji element pa v indeksu n-1, kjer je n skupno število elementov v matriki.
V primeru matrike starosti bo prvi element shranjen v indeksu 0, zadnji element pa v indeksu 4.
Uporabimo matriko starosti, da pokažemo, kako lahko izvedemo inicializacijo matrike:
int age[5] = {19, 18, 21, 20, 17};
Skupno število elementov znotraj {} ne sme presegati vrednosti, navedene v []. Element 19 ima indeks 0, 18 pri indeksu 1, 21 pri indeksu 2, 20 pri indeksu 3 in 17 pri indeksu 4. Če ne navedete števila elementov, ki naj bodo shranjeni v matriki znotraj [], polje bo dovolj velik, da bo lahko vseboval elemente, dodane v {}. Na primer:
int age[] = {19, 18, 21, 20, 17};
Zgornja izjava bo ustvarila popolnoma enako matriko kot prejšnja. Polju lahko z enim indeksom dodelite tudi en element. Na primer:
age[3] = 20;
Zgornji stavek bo shranil vrednost 20 v indeksu 3 polja z imenom age. To pomeni, da 20 bodo 4 th element matrike.
Vrste nizov
Obstajata dve vrsti nizov C ++:
- Enodimenzionalno polje
- Večdimenzionalno polje
- Kazalec na polje
Enodimenzionalno polje
To je matrika, v kateri so podatki postavljeni linearno samo v eno dimenzijo. Običajno se imenuje 1-D matrika. Sintaksa:
datatype array-name[size];
- Ime polja je ime polja.
- Velikost je število elementov, ki jih je treba shraniti v matriko.
Na primer:
#includeusing namespace std;int main(){int age[5] = { 19, 18, 21, 20, 17 };for (int x = 0; x < 5; x++){cout < Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- Vključitev glave datoteke iostream v našo kodo. Omogočil nam bo branje s konzole in pisanje nanjo.
- Vključno z imenskim prostorom std, da lahko uporablja njegove razrede in funkcije, ne da bi ga poklical.
- Poklic funkcije main (), znotraj katere je treba dodati logiko programa.
- Začetek telesa glavne () funkcije.
- Razglasitev polja z imenom age za shranjevanje 5 celih števil. Inicializiranih je bilo tudi pet celih števil.
- Z zanko for ustvarite celoštevilčno spremenljivko x.
- Začetek telesa zanke for.
- Z uporabo spremenljivke zanke x pregledujte vrednosti starosti matrike in jih natisnite na konzolo. "\ N" je znak nove vrstice in se po vsaki ponovitvi natisne v novo vrstico.
- Konec telesa zanke for.
- Konec telesa glavne () funkcije.
Večdimenzionalno polje
To je matrika, v kateri so postavke podatkov razporejene tako, da tvorijo matriko. Večdimenzionalno polje ima lahko poljubno število dimenzij, vendar so dvodimenzionalni in tridimenzionalni nizi pogosti. Sintaksa:
datatype array-name[d1][d2][d3]… [dn];Ime polja je ime polja, ki bo imelo n dimenzij. Na primer:
Dvodimenzionalna matrika
2D polje shrani podatke na seznam z enodimenzionalnim nizom. Je matrika z vrsticami in stolpci. Če želite prijaviti 2D matriko, uporabite naslednjo skladnjo:
type array-Name [ x ][ y ];Tip mora biti veljaven podatkovni tip C ++. 2D matriko si oglejte kot tabelo, kjer x označuje število vrstic, y pa število stolpcev. To pomeni, da vsak element v 2D matriki prepoznate v obliki a [x] [y], kjer je x število vrstic, y pa število stolpcev, v katere pripada element.
Tu je primer, kako inicializirati 2D matriko:
int a[2][3] = {{0, 2, 1} , /* row at index 0 */{4, 3, 7} , /* row at index 1 */};V zgornjem primeru imamo 2D matriko, ki jo lahko vidimo kot matriko 2x3. Obstajata 2 vrstici in 3 stolpci. Do elementa 0 je mogoče dostopati kot [0] [1], ker se nahaja na presečišču vrstice, indeksirane 0, in stolpca 1. Elementa 3 je mogoče dostopati kot [1] [2], ker se nahaja na presečišče vrstice z indeksom 1 in stolpca z indeksom 2.
Upoštevajte, da smo preprosto dodali zavite oklepaje, da smo razlikovali različne vrstice elementov. Inicializacija bi lahko bila izvedena tudi na naslednji način:
int a[2][3] = {0, 2, 1, 4, 3, 7};};Naslednji primer C ++ prikazuje, kako inicializirati in prečkati 2D matriko:
#includeusing namespace std;int main(){// a 2x3 arrayint a[3][2] = { {0, 2}, {1, 4}, {3, 7} };// traverse array elementsfor (int i=0; i<3; i++)for (int j=0; j<2; j++){cout << "a[" < Izhod:
Tu je posnetek zaslona zgornje kode:
Razlaga kode:
- Vključitev glave datoteke iostream v našo kodo. Omogočil nam bo branje s konzole in pisanje nanjo.
- Vključno z imenskim prostorom std, da lahko uporablja njegove razrede in funkcije, ne da bi ga poklical.
- Poklic funkcije main (), znotraj katere je treba dodati kodo.
- Začetek telesa glavne () funkcije.
- Komentar. Prevajalnik C ++ bo to preskočil.
- Deklariranje 2D matrike s 3 vrsticami in 2 stolpcema. Elementi so bili dodani tudi v matriko.
- Komentar. Prevajalnik C ++ bo to preskočil.
- Ustvarjanje spremenljivke i z uporabo zanke for. Ta spremenljivka se bo ponavljala po indeksih vrstic polja.
- Ustvarjanje spremenljivke j z uporabo zanke for. Ta spremenljivka se bo ponavljala po indeksih stolpcev polja.
- Začetek telesa zank.
- Natisnite vrednosti spremenljivk i in j na konzolo znotraj oglatih oklepajev na konzoli.
- Natisnite vrednost, shranjeno v indeksu [i] [j] polja a.
- Konec telesa zank.
- Funkcija main () mora vrniti celoštevilčno vrednost, če program deluje dobro.
- Konec telesa glavne () funkcije.
Tridimenzionalno polje
3D-niz je niz nizov. Vsak element v 3D-nizu je označen z naborom 3 indeksov. Za dostop do elementov 3D-polja uporabimo tri for zanke. Na primer:
#includeusing namespace std;void main(){int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}};cout << "a[0][1][0] = " << a[0][1][0] << "\n";cout << "a[0][1][1] = " << a[0][1][1] << "\n";} Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- Vključitev glave datoteke iostream v našo kodo. Omogočil nam bo branje s konzole in pisanje nanjo.
- Vključno z imenskim prostorom std, da lahko uporablja njegove razrede in funkcije, ne da bi ga poklical.
- Poklic funkcije main (), znotraj katere je treba dodati logiko programa.
- Začetek telesa glavne () funkcije.
- Deklariranje 3D-polja z imenom velikosti 2x3x2. Inicializirane so bile tudi vrednosti polja.
- Dostop do predmeta, shranjenega v indeksu [0] [1] [0] polja, in tiskanje na konzolo.
- Dostop do predmeta, shranjenega v indeksu [0] [1] [1] polja, in tiskanje na konzolo.
- Konec telesa glavne () funkcije.
Kazalec na polje
Kazalec je spremenljivka, ki vsebuje naslov. Razen uporabe kazalca za shranjevanje naslova spremenljivke, lahko z njim shranimo naslov celice matrike. Ime polja nenehno kaže na njegov prvi element. Upoštevajte izjavo, navedeno spodaj:
int age[5];Starost je kazalec na $ age [0], naslov prvega elementa polja z imenom age. Upoštevajte naslednji primer:
#includeusing namespace std;int main(){int *john;int age[5] = { 19, 18, 21, 20, 17 };john = age;cout << john << "\n";cout << *john;} Izhod:
Upoštevajte, da lahko prva vrednost zgornjega izhoda vrne drugačno vrednost, odvisno od naslova, ki je dodeljen prvemu elementu polja v pomnilniku računalnika.
Tu je posnetek zaslona kode:
Razlaga kode:
- Vključitev glave datoteke iostream v našo kodo. Omogočil nam bo branje s konzole in pisanje nanjo.
- Vključno z imenskim prostorom std, da lahko uporablja njegove razrede in funkcije, ne da bi ga poklical.
- Poklic funkcije main (), znotraj katere je treba dodati logiko programa.
- Začetek telesa glavne () funkcije.
- Razglasitev spremenljivke kazalca z imenom * john.
- Razglasitev celoštevilskega polja z imenom age za shranjevanje 5 celih števil. Inicializirane so tudi vrednosti celih števil.
- Dodelitev spremenljivki john vrednosti naslova predmeta, shranjenega v prvem indeksu starosti polja.
- Tiskanje vrednosti spremenljivke john, ki je naslov postavke, shranjene v prvem indeksu starosti polja.
- Tiskanje prve vrednosti, shranjene v starosti matrike.
- Konec telesa glavne () funkcije.
Imena matrik lahko uporabimo kot konstantne kazalce, velja pa tudi obratno. To pomeni, da lahko do vrednosti, shranjene v indeksu 3 starosti matrike, dostopate z * (starost + 3). Na primer:
#includeusing namespace std;int main() {// an array of 5 elements.int age[5] = { 19, 18, 21, 20, 17 };int *p;p = age;// output array valuescout << "Using pointer: " << endl;for (int x=0; x<5; x++) {cout << "*(p + " << x << ") : ";cout << *(p + x) << endl;}cout << "Using age as address: " << endl;for (int x = 0; x < 5; x++) {cout << "*(age + " << x << ") : ";cout << *(age + x) << endl;}return 0;} Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- Vključitev glave datoteke iostream v našo kodo. Omogočil nam bo branje s konzole in pisanje nanjo.
- Vključno z imenskim prostorom std, da lahko uporablja njegove razrede in funkcije, ne da bi ga poklical.
- Klic funkcije main () in začetek telesa funkcije main ().
- Komentar. Prevajalnik C ++ bo to preskočil.
- Razglasitev polja z imenom age za shranjevanje 5 celih števil.
- Ustvarjanje kazalca na celo število str.
- Dodelitev p vrednosti naslova prvega elementa matrike age.
- Komentar. Prevajalnik C ++ bo to preskočil.
- Natisnite nekaj besedila na konzoli.
- Ustvari celo število x s pomočjo zanke for. {Označuje začetek telesa zanke for.
- Na konzoli natisnite vrednosti x v kombinaciji z nekaterim drugim besedilom.
- Na konzoli natisnite vrednosti * (p + x).
- Konec telesa zanke for.
- Natisnite nekaj besedila na konzoli.
- Ustvari spremenljivko x z zanko for. {Označuje začetek telesa zanke for.
- Natisnite vrednosti x od 0 do 4 poleg drugega besedila.
- Natisnite vrednosti * (starost + x).
- Konec telesa zanke for.
- Vrni vrednost, če se program uspešno izvaja.
- Konec telesa glavne () funkcije.
Dostop do vrednosti polja
Do elementov matrike se dostopa s pomočjo njihovih ustreznih indeksov. Kazalo elementa, do katerega želite dostopati, se doda v oglate oklepaje [] takoj za imenom polja. Na primer:
int john = age[2];V zgornjem primeru preprosto navajamo, da je Johnova starost shranjena v indeksu 2 polja z imenom age. To pomeni, da je 3 starost john rd vrednost v array starosti. Tu je popoln primer C ++, ki prikazuje, kako dostopati do te vrednosti in jo natisniti:
#includeusing namespace std;int main(){int age[5] = { 19, 18, 21, 20, 17 };int john = age[2];cout << "The age of John is:"< Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- Vključitev glave datoteke iostream v našo kodo. Omogočil nam bo branje s konzole in pisanje nanjo.
- Vključno z imenskim prostorom std, da lahko uporablja njegove razrede in funkcije, ne da bi ga poklical.
- Poklic funkcije main (), znotraj katere je treba dodati kodo.
- Začetek telesa glavne () funkcije.
- Deklariranje polja z imenom age za shranjevanje 5 celoštevilskih elementov.
- Dostop do vrednosti, shranjene v indeksu 2 starosti matrike, in shranjevanje njene vrednosti v spremenljivko z imenom john.
- Tiskanje vrednosti spremenljivke john na konzolo poleg drugega besedila.
Prednosti matrike v jeziku C ++
Tu so prednosti / prednosti uporabe Array v jeziku C ++:
- Elemente matrike je mogoče enostavno prehoditi.
- Enostavno upravljanje podatkov s podatki.
- Do elementov matrike je mogoče dostopati naključno.
- Polja olajšajo optimizacijo kode; zato lahko z manj kode opravimo veliko dela.
- Enostavno razvrščanje podatkovnih nizov.
Slabosti matrike v jeziku C ++
- Polje ima fiksno velikost; zato mu po inicializaciji ne moremo dodati novih elementov.
- Dodelitev več pomnilnika, kot je zahteva, povzroči izgubo prostora v pomnilniku in manjša dodelitev pomnilnika lahko povzroči težavo.
- Število elementov, ki jih je treba shraniti v matriko, mora biti vnaprej znano.
Povzetek
- Matrika je podatkovna struktura, ki hrani elemente istega podatkovnega tipa.
- Elementi matrike se shranijo zaporedno.
- Elementi polja so označeni z ustreznimi indeksi. Prvi element ima indeks 0, zadnji element pa indeks n-1, kjer je skupno število elementov matrike.
- Deklaracija matrike vključuje določanje podatkovnih vrst elementov matrike in števila elementov, ki jih je treba shraniti v matriko.
- Enodimenzionalna matrika zaporedno shranjuje elemente.
- Dvodimenzionalno polje shrani elemente v vrstice in stolpce.
- Tridimenzionalno polje je polje nizov.
- Elemente lahko v matriko dodajamo z njihovimi indeksi.
- Do elementov matrike lahko dostopate z njihovimi indeksi.
- Večdimenzionalno polje ima več dimenzij.
- Ime polja kaže na njegov prvi element.
- Polja imajo fiksno velikost, kar pomeni, da novih elementov ni mogoče dodati v matriko po njeni inicializaciji.