Ce este o matrice?
O matrice este o structură de date care stochează secvențial un element de același tip de date. O matrice C ++ are o dimensiune fixă.
Puteți vedea o matrice ca o colecție de variabile de un tip de date similar. În loc să declarați fiecare variabilă și să îi atribuiți o valoare individual, puteți să declarați o variabilă (matricea) și să adăugați valorile diferitelor variabile. Fiecare valoare adăugată la matrice este identificată printr-un index.
În acest tutorial C ++, veți învăța:
- Ce este o matrice?
- De ce avem nevoie de tablouri?
- Declarați o matrice în C ++
- Inițializarea matricei
- Tipuri de matrice
- Matrice unidimensională
- Array multidimensional
- Matrice bidimensională
- Trei-matrice dimensionale
- Pointer către o matrice
- Accesarea valorilor unui Array
- Avantajele unui tablou în C ++
- Dezavantaje ale unei matrice în C ++
De ce avem nevoie de tablouri?
Tablourile sunt foarte importante în orice limbaj de programare. Acestea oferă o modalitate mai convenabilă de stocare a variabilelor sau o colecție de date de un tip similar de date împreună, în loc să le stocheze separat. Fiecare valoare a matricei va fi accesată separat.
Declarați o matrice în C ++
Declarația matricei în C ++ implică declararea tipului, precum și numărul de elemente care trebuie stocate de matrice. Sintaxă:
type array-Name [ array-Size ];
Reguli pentru declararea unui tablou cu o singură dimensiune în C ++.
- Tip: Tipul este tipul de elemente care trebuie stocate în matrice și trebuie să fie un tip de date C ++ valid.
- Numele matricii : numele matricii este numele care trebuie atribuit matricei.
- Array-Size: array-Size este numărul de elemente care trebuie stocate în matrice. Trebuie să fie un număr întreg și mai mare de 0.
De exemplu, puteți crea o matrice numită vârstă și puteți stoca vârsta de 5 studenți după cum urmează:
int age[5];
Vârsta matricei va stoca 5 numere întregi care reprezintă vârstele diferiților studenți.
Inițializarea matricei
Inițializarea matricei este procesul de atribuire / stocare a elementelor unui tablou. Inițializarea se poate face într-o singură declarație sau una câte una. Rețineți că primul element dintr-o matrice este stocat la indexul 0, în timp ce ultimul element este stocat la indexul n-1, unde n este numărul total de elemente din matrice.
În cazul matricei de vârstă, primul element va fi stocat la indexul 0, în timp ce ultimul element va fi stocat la indexul 4.
Să folosim matricea de vârstă pentru a demonstra cum se poate face inițializarea matricei:
int age[5] = {19, 18, 21, 20, 17};
Numărul total de elemente din {} nu poate depăși valoarea indicată în []. Elementul 19 este la index 0, 18 la index 1, 21 la index 2, 20 la index 3 și 17 la index 4. Dacă nu indicați numărul de elemente care trebuie stocate în matricea din [], matricea va fi suficient de mare pentru a conține elementele adăugate în {}. De exemplu:
int age[] = {19, 18, 21, 20, 17};
Afirmația de mai sus va crea exact aceeași matrice ca și cea anterioară. De asemenea, puteți atribui un element unui tablou folosind indexul acestuia. De exemplu:
age[3] = 20;
Declarația de mai sus va stoca valoarea 20 la indexul 3 al matricei denumită vârstă. Acest lucru înseamnă că 20 va fi 4 - lea element al matricei.
Tipuri de matrice
Există două tipuri de matrice C ++:
- Matrice unidimensională
- Array multidimensional
- Pointer către o matrice
Matrice unidimensională
Aceasta este o matrice în care elementele de date sunt aranjate liniar într-o singură dimensiune. Este denumită în mod obișnuit o matrice 1-D. Sintaxă:
datatype array-name[size];
- Numele matricei este numele matricei.
- Dimensiunea este numărul de articole care trebuie stocate în matrice.
De exemplu:
#includeusing namespace std;int main(){int age[5] = { 19, 18, 21, 20, 17 };for (int x = 0; x < 5; x++){cout < Ieșire:
Iată o captură de ecran a codului:
Explicatie cod:
- Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
- Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
- Apelarea funcției main () în cadrul căreia ar trebui adăugată logica programului.
- Începutul corpului funcției main ().
- Declararea unei matrice numită vârstă pentru a stoca 5 numere întregi. Au fost inițializate și cele 5 numere întregi.
- Creați o variabilă întreagă x folosind o buclă for.
- Începutul corpului buclei for.
- Folosind variabila buclă x pentru a itera peste valorile vârstei matricei și a le imprima pe consolă. „\ N” este un caracter de linie nouă și se imprimă într-o nouă linie după fiecare iterație.
- Sfârșitul corpului pentru o buclă.
- Sfârșitul corpului funcției main ().
Array multidimensional
Aceasta este o matrice în care elementele de date sunt aranjate pentru a forma o matrice de matrice. O matrice multidimensională poate avea orice număr de dimensiuni, dar matricile bidimensionale și tridimensionale sunt comune. Sintaxă:
datatype array-name[d1][d2][d3]… [dn];Numele matricei este numele matricei care va avea n dimensiuni. De exemplu:
Matrice bidimensională
O matrice 2D stochează date într-o listă cu matrice 1-D. Este o matrice cu rânduri și coloane. Pentru a declara o matrice 2D, utilizați următoarea sintaxă:
type array-Name [ x ][ y ];Tipul trebuie să fie un tip de date C ++ valid. Vedeți o matrice 2D ca un tabel, unde x reprezintă numărul de rânduri în timp ce y reprezintă numărul de coloane. Aceasta înseamnă că identificați fiecare element dintr-o matrice 2D folosind forma a [x] [y], unde x este numărul de rând și y numărul de coloane din care aparține elementul.
Iată un exemplu de inițializare a unei matrice 2D:
int a[2][3] = {{0, 2, 1} , /* row at index 0 */{4, 3, 7} , /* row at index 1 */};În exemplul de mai sus, avem o matrice 2D care poate fi văzută ca o matrice 2x3. Există 2 rânduri și 3 coloane. Elementul 0 poate fi accesat ca [0] [1] deoarece este situat la intersecția rândului indexat 0 și a coloanei indexate 1. Elementul 3 poate fi accesat ca [1] [2] deoarece este situat la intersecția rândului indexat 1 și a coloanei indexate 2.
Rețineți că am adăugat pur și simplu acolade pentru a diferenția diferitele rânduri de elemente. Inițializarea s-ar fi putut face și după cum urmează:
int a[2][3] = {0, 2, 1, 4, 3, 7};};Următorul exemplu C ++ demonstrează cum se inițializează și se traversează o matrice 2D:
#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[" < Ieșire:
Iată o captură de ecran a codului de mai sus:
Explicatie cod:
- Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
- Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
- Apelarea funcției main () în cadrul căreia trebuie adăugat codul.
- Începutul corpului funcției main ().
- Un comentariu. Compilatorul C ++ va ignora acest lucru.
- Declararea unei matrice 2D de 3 rânduri și 2 coloane. Au fost adăugate și elemente în matrice.
- Un comentariu. Compilatorul C ++ va ignora acest lucru.
- Crearea unei variabile i folosind a pentru o buclă. Această variabilă va itera peste indexurile rândurilor matricei.
- Crearea unei variabile j folosind a pentru o buclă. Această variabilă va itera peste indexurile coloanelor matricei.
- Începutul corpului buclelor.
- Imprimați valorile variabilelor i și j pe consolă între paranteze pătrate pe consolă.
- Imprimați valoarea stocată la indexul [i] [j] al tabloului a.
- Sfârșitul corpului buclelor.
- Funcția main () ar trebui să returneze o valoare întreagă dacă programul rulează bine.
- Sfârșitul corpului funcției main ().
Trei-matrice dimensionale
O matrice 3D este o matrice de matrice. Fiecare element dintr-o matrice 3D este identificat printr-un set de 3 indici. Pentru a accesa elementele unei matrice 3D, folosim trei pentru bucle. De exemplu:
#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";} Ieșire:
Iată o captură de ecran a codului:
Explicatie cod:
- Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
- Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
- Apelarea funcției main () în cadrul căreia ar trebui adăugată logica programului.
- Începutul corpului funcției main ().
- Declararea unui tablou 3D numit an de dimensiune 2x3x2. Valorile matricei au fost, de asemenea, inițializate.
- Accesarea elementului stocat la indexul [0] [1] [0] al tabloului și imprimarea acestuia pe consolă.
- Accesarea elementului stocat la indexul [0] [1] [1] al tabloului și imprimarea acestuia pe consolă.
- Sfârșitul corpului funcției main ().
Pointer către o matrice
Un indicator este o variabilă care deține o adresă. În afară de utilizarea unui pointer pentru a stoca adresa unei variabile, îl putem folosi pentru a stoca adresa unei celule matrice. Numele unui tablou indică în mod constant primul său element. Luați în considerare declarația dată mai jos:
int age[5];Vârsta este un indicator către $ age [0], adresa primului element al unui array numit age. Luați în considerare următorul exemplu:
#includeusing namespace std;int main(){int *john;int age[5] = { 19, 18, 21, 20, 17 };john = age;cout << john << "\n";cout << *john;} Ieșire:
Rețineți că prima valoare a ieșirii de mai sus poate returna o valoare diferită în funcție de adresa atribuită primului element al tabloului din memoria computerului.
Iată o captură de ecran a codului:
Explicatie cod:
- Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
- Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
- Apelarea funcției main () în cadrul căreia ar trebui adăugată logica programului.
- Începutul corpului funcției main ().
- Declararea unei variabile pointer numite * john.
- Declararea unei matrice întregi numită vârstă pentru a stoca 5 numere întregi. Valorile numerelor întregi au fost, de asemenea, inițializate.
- Atribuind variabilei john valoarea adresei articolului stocat în primul index al vârstei matricei.
- Imprimarea valorii variabilei john, care este adresa articolului stocat în primul index al vârstei matricei.
- Tipărirea primei valori stocate în vârsta matricei.
- Sfârșitul corpului funcției main ().
Numele de matrice pot fi folosite ca indicatori constanți, și invers este, de asemenea, adevărat. Aceasta înseamnă că puteți accesa valoarea stocată la indexul 3 al vârstei matricei cu * (vârsta + 3). De exemplu:
#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;} Ieșire:
Iată o captură de ecran a codului:
Explicatie cod:
- Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
- Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
- Apelarea funcției main () și începutul corpului funcției main ().
- Un comentariu. Compilatorul C ++ va ignora acest lucru.
- Declararea unei matrice numită vârstă pentru a stoca 5 numere întregi.
- Crearea unui indicator întreg p.
- Atribuind p valoarea adresei primului element al vârstei matricei.
- Un comentariu. Compilatorul C ++ va ignora acest lucru.
- Imprimați un text pe consolă.
- Creați un număr întreg x folosind a pentru o buclă. {Marchează începutul corpului buclei pentru.
- Imprimați valorile lui x combinate cu un alt text de pe consolă.
- Imprimați valorile * (p + x) pe consolă.
- Sfârșitul corpului pentru o buclă.
- Imprimați un text pe consolă.
- Creați o variabilă x folosind a pentru o buclă. {Marchează începutul corpului buclei for.
- Imprimați valorile lui x de la 0 la 4 alături de alt text.
- Imprimați valorile * (vârstă + x).
- Sfârșitul corpului buclei for.
- Returnează valoarea dacă programul rulează cu succes.
- Sfârșitul corpului funcției main ().
Accesarea valorilor unui Array
Elementele dintr-o matrice sunt accesate folosind indexurile respective. Indexul elementului care urmează să fie accesat este adăugat între paranteze pătrate [] imediat după numele matricei. De exemplu:
int john = age[2];În exemplul de mai sus, afirmăm pur și simplu că vârsta lui John este stocată la indexul 2 al tabloului denumit age. Acest lucru înseamnă că vârsta lui Ioan este de 3 rd valoarea în vârstă matrice. Iată un exemplu complet C ++ care arată cum să accesați și să imprimați această valoare:
#includeusing namespace std;int main(){int age[5] = { 19, 18, 21, 20, 17 };int john = age[2];cout << "The age of John is:"< Ieșire:
Iată o captură de ecran a codului:
Explicatie cod:
- Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
- Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
- Apelarea funcției main () în cadrul căreia trebuie adăugat codul.
- Începutul unui corp al funcției main ().
- Declararea unei matrice numită vârstă pentru a stoca 5 elemente întregi.
- Accesarea valorii stocate la indexul 2 al vârstei matricei și stocarea valorii acesteia într-o variabilă numită john.
- Imprimarea valorii variabilei John pe consolă alături de alt text.
Avantajele unui tablou în C ++
Iată care sunt avantajele / avantajele utilizării Array în C ++:
- Elementele matricei pot fi parcurse cu ușurință.
- Ușor de manipulat datele matrice.
- Elementele matricei pot fi accesate aleatoriu.
- Tablourile facilitează optimizarea codului; prin urmare, putem efectua multă muncă folosind mai puțin cod.
- Ușor de sortat datele matricei.
Dezavantaje ale unei matrice în C ++
- O matrice are o dimensiune fixă; prin urmare, nu putem adăuga elemente noi după inițializare.
- Alocarea mai multor memorii decât cerința duce la pierderea spațiului de memorie și o alocare mai mică a memoriei poate crea o problemă.
- Numărul de elemente care trebuie stocate într-o matrice trebuie cunoscut în prealabil.
rezumat
- O matrice este o structură de date care stochează elemente de același tip de date.
- Elementele matrice sunt stocate secvențial.
- Elementele matrice sunt notate folosind indexurile respective. Primul element este la indexul 0, în timp ce ultimul element este la indexul n-1, unde este numărul total de elemente matrice.
- Declarația unui tablou implică definirea tipurilor de date ale elementelor matricei, precum și numărul de elemente care trebuie stocate în matrice.
- O matrice unidimensională stochează elemente secvențial.
- O matrice bidimensională stochează elemente în rânduri și coloane.
- O matrice tridimensională este o matrice de matrice.
- Elementele pot fi adăugate la o matrice folosind indexurile lor.
- Elementele matrice sunt accesate folosind indexurile lor.
- O matrice multidimensională are mai multe dimensiuni.
- Numele matricei indică primul său element.
- Tablourile au o dimensiune fixă, ceea ce înseamnă că elementele noi nu pot fi adăugate la tablou după inițializarea acestuia.