Matrice în C++ | Declara | Inițializați | Pointer către exemple de matrice

Ce este un Array?

O matrice este o structură de date care stochează secvenţial un element de acelaşi tip de date. O C++ matricea 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 declara o variabilă (matricea) și adăugați valorile diferitelor variabile la aceasta. Fiecare valoare adăugată la matrice este identificată printr-un index.

De ce avem nevoie de matrice?

Arrays sunt foarte importante în orice limbaj de programare. Ele oferă o modalitate mai convenabilă de stocare a variabilelor sau a unei colecții de date de un tip de date similar împreună, în loc să le stocheze separat. Fiecare valoare a matricei va fi accesată separat.

Declarați o matrice în C++

Declarație de matrice în C++ implică precizarea tipului, precum și a numărului de elemente care urmează să fie 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 valid C++ tipul de date.
  • Nume-matrice: Array-Name este numele care trebuie atribuit matricei.
  • Dimensiunea matricei: Array-Size este numărul de elemente care trebuie stocate în matrice. Trebuie să fie un număr întreg și mai mare decât 0.

De exemplu, puteți crea o matrice numită vârstă și puteți stoca vârstele a 5 studenți, după cum urmează:

int age[5];

Vârsta matricei va stoca 5 numere întregi reprezentând 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ă instrucțiune 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 indicele 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 menționată în [ ]. Elementul 19 este la indexul 0, 18 la indexul 1, 21 la indexul 2, 20 la indexul 3 și 17 la indexul 4. Dacă nu specificați numărul de elemente care urmează să fie stocate în matrice în [ ], matricea va fi suficient de mare pentru a ține elementele adăugate în { }. De exemplu:

int age[] = {19, 18, 21, 20, 17};

Declarația de mai sus va crea exact aceeași matrice ca cea anterioară. De asemenea, puteți atribui un element unei matrice folosind indexul acestuia. De exemplu:

age[3] = 20;

Declarația de mai sus va stoca valoarea 20 la indexul 3 al matricei numită vârstă. Aceasta înseamnă că 20 va fi 4th element al matricei.

Tipuri de matrice

Există două tipuri de C++ matrice:

  • Matrice unidimensională
  • Matrice multidimensională
  • Pointer către o matrice

Matrice unidimensională

Aceasta este o matrice în care elementele de date sunt aranjate liniar într-o singură dimensiune. Se numește în mod obișnuit o matrice 1-D. Sintaxă:

datatype array-name[size];
  • Numele-matrice este numele matricei.
  • Mărimea este numărul de articole care urmează să fie stocate în matrice.

De exemplu:

#include <iostream>
using namespace std;

int main()
{
	int age[5] = { 19, 18, 21, 20, 17 };
	for (int x = 0; x < 5; x++)
	{
		cout <<age[x]<<"\n";
	}
}

ieșire:

Matrice unidimensională

Iată o captură de ecran a codului:

Matrice unidimensională

Explicația codului:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  3. Apelarea funcției main() în interiorul căreia ar trebui adăugată logica programului.
  4. Începutul corpului funcției main().
  5. Declararea unui tablou denumit vârsta pentru a stoca 5 numere întregi. Cele 5 numere întregi au fost și ele inițializate.
  6. Creați o variabilă întreagă x folosind o buclă for.
  7. Începutul corpului buclei for.
  8. Folosind variabila buclă x pentru a repeta peste valorile vechimii matricei și a le tipări pe consolă. „\n” este un caracter newline și se tipărește într-o nouă linie după fiecare iterație.
  9. Capătul corpului pentru bucla.
  10. Sfârșitul corpului funcției main().

Matrice 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 matricele bidimensionale și tridimensionale sunt comune. Sintaxă:

datatype array-name[d1][d2][d3]...[dn];

Numele-matrice 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 valid C++ tip de date. Vedeți o matrice 2D ca un tabel, unde x denotă numărul de rânduri în timp ce y denotă 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ânduri și y numărul de coloane din care face parte elementul.

Iată un exemplu despre cum să inițializați o 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 2×3. Sunt 2 rânduri și 3 coloane. Elementul 0 poate fi accesat ca a[0][1] deoarece este situat la intersecția rândului indexat 0 și coloanei indexate 1. Elementul 3 poate fi accesat ca a[1][2] deoarece este situat la intersecția rândului indexat 1 și coloanei indexat 2.

Rețineți că am adăugat pur și simplu acolade pentru a diferenția diferitele rânduri de elemente. Inițializarea ar fi putut fi făcută și după cum urmează:

int a[2][3] = {0, 2, 1, 4, 3, 7};
   };

Următoarele C++ exemplu demonstrează cum să inițializați și să traversați o matrice 2D:

#include <iostream>
using namespace std;
int main() 
{
	// a 2x3 array
	int a[3][2] = { {0, 2}, {1, 4}, {3, 7} };

	// traverse array elements

	for (int i=0; i<3; i++)
		for (int j=0; j<2; j++) 
		
		{
			cout << "a[" <<i<< "][" <<j<< "]: ";
			cout << a[i][j] << endl;
		}
	return 0;
}

ieșire:

Matrice bidimensională

Iată o captură de ecran a codului de mai sus:

Matrice bidimensională

Explicația codului:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  3. Apelarea funcției main() în cadrul căreia ar trebui adăugat codul.
  4. Începutul corpului funcției main().
  5. Un comentariu. The C++ compilatorul va omite acest lucru.
  6. Declararea unei matrice 2D de 3 rânduri și 2 coloane. Elementele au fost, de asemenea, adăugate la matrice.
  7. Un comentariu. The C++ compilatorul va omite acest lucru.
  8. Crearea unei variabile i folosind o buclă for. Această variabilă va itera peste indicii de rând ai matricei.
  9. Crearea unei variabile j folosind o buclă for. Această variabilă va itera peste indecșii coloanei matricei.
  10. Începutul corpului buclelor.
  11. Tipăriți valorile variabilelor i și j pe consolă între paranteze pătrate de pe consolă.
  12. Tipăriți valoarea stocată la indexul [i][j] al tabloului a.
  13. Capătul corpului buclelor.
  14. Funcția main() ar trebui să returneze o valoare întreagă dacă programul rulează bine.
  15. Sfârșitul corpului funcției main().

Matrice tridimensională

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 unui tablou 3D, folosim trei bucle for. De exemplu:

#include<iostream>
using 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:

Matrice tridimensională

Iată o captură de ecran a codului:

Matrice tridimensională

Explicația codului:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  3. Apelarea funcției main() în interiorul căreia ar trebui adăugată logica programului.
  4. Începutul corpului funcției main().
  5. Declararea unei matrice 3D numită an de dimensiunea 2x3x2. Au fost de asemenea inițializate valorile matricei.
  6. Accesarea articolului stocat la indexul [0][1][0] al matricei și tipărirea lui pe consolă.
  7. Accesarea articolului stocat la indexul [0][1][1] al matricei și tipărirea lui pe consolă.
  8. Sfârșitul corpului funcției main().

Pointer către o matrice

A indicatorul 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 de mai jos:

int age[5];

Vârsta este un pointer către $age[0], adresa primului element al unui tablou numit age. Luați în considerare următorul exemplu:

#include <iostream>
using namespace std;
int main()
{
	int *john;

	int age[5] = { 19, 18, 21, 20, 17 };

	john = age;

	cout << john << "\n";

	cout << *john;
	
}

ieșire:

Pointer către o matrice

Rețineți că prima valoare a rezultatului de mai sus poate returna o valoare diferită, în funcție de adresa atribuită primului element al matricei din memoria computerului dvs.

Iată o captură de ecran a codului:

Pointer către o matrice

Explicația codului:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  3. Apelarea funcției main() în interiorul căreia ar trebui adăugată logica programului.
  4. Începutul corpului funcției main().
  5. Declararea unei variabile pointer numită *john.
  6. Declararea unei matrice de numere întregi numită vârstă pentru a stoca 5 numere întregi. Au fost inițializate și valorile numerelor întregi.
  7. Atribuirea variabilei john a valorii adresei articolului stocat în primul index al matricei de vârstă.
  8. Imprimarea valorii variabilei john, care este adresa articolului stocat în primul index al matricei de vârstă.
  9. Imprimarea primei valori stocate în epoca matricei.
  10. Sfârșitul corpului funcției main().

Numele de matrice pot fi folosite ca indicatori constante, iar invers este de asemenea adevărat. Aceasta înseamnă că puteți accesa valoarea stocată la indexul 3 al vechimii matricei cu *(vârsta + 3). De exemplu:

#include <iostream>
using namespace std;

int main() {
	// an array of 5 elements.
	int age[5] = { 19, 18, 21, 20, 17 };
	int *p;

	p = age;

	// output array values

	cout << "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:

Pointer către o matrice

Iată o captură de ecran a codului:

Pointer către o matrice

Explicația codului:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  3. Apelarea funcției main() și începutul corpului funcției main().
  4. Un comentariu. The C++ compilatorul va omite acest lucru.
  5. Declararea unui tablou denumit vârsta pentru a stoca 5 numere întregi.
  6. Crearea unui pointer întreg p.
  7. Atribuirea p valorii adresei primului element al vechimii tabloului.
  8. Un comentariu. The C++ compilatorul va omite acest lucru.
  9. Imprimați ceva text pe consolă.
  10. Creați un număr întreg x folosind o buclă for. { marchează începutul corpului buclei for.
  11. Imprimați valorile lui x combinate cu alt text pe consolă.
  12. Imprimați valorile lui *(p + x) pe consolă.
  13. Sfârșitul corpului buclei for.
  14. Imprimați ceva text pe consolă.
  15. Creați o variabilă x folosind o buclă for. { marchează începutul corpului buclei for.
  16. Tipăriți valorile lui x de la 0 la 4 alături de un alt text.
  17. Tipăriți valorile lui *(vârsta + x).
  18. Capătul corpului buclei for.
  19. Valoarea returnată dacă programul rulează cu succes.
  20. Sfârșitul corpului funcției main().

Accesarea valorilor unui Array

Elementele unui tablou sunt accesate folosind indecșii lor respectivi. Indexul elementului de accesat este adăugat între paranteze drepte [ ] imediat după numele tabloului. 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 matricei numită vârstă. Aceasta înseamnă că vârsta lui John este de 3 anird valoare în epoca matricei. Iată un complet C++ exemplu care arată cum să accesați și să tipăriți această valoare:

#include<iostream>
using namespace std;
int main()
{
	int age[5] = { 19, 18, 21, 20, 17 };
	int john = age[2];
	cout << "The age of John is:"<<john;
}

ieșire:

Accesarea valorilor unui Array

Iată o captură de ecran a codului:

Accesarea valorilor unui Array

Explicația codului:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  3. Apelarea funcției main() în cadrul căreia ar trebui adăugat codul.
  4. Începutul unui corp al funcției main().
  5. Declararea unui tablou denumit vârsta pentru a stoca 5 elemente întregi.
  6. Accesarea valorii stocate la indexul 2 al vechimii matricei și stocarea valorii acesteia într-o variabilă numită john.
  7. Imprimarea valorii variabilei john pe consolă alături de alt text.

Avantajele unui Array în C++

Iată avantajele/beneficiile utilizării Array în C++:

  • Elementele matricei pot fi parcurse cu ușurință.
  • Ușor de manipulat date matrice.
  • Elementele matricei pot fi accesate aleatoriu.
  • Matricele facilitează optimizarea codului; prin urmare, putem lucra mult folosind mai puțin cod.
  • Ușor de sortat matrice de date.

Dezavantajele unui Array în C++

  • O matrice are o dimensiune fixă; prin urmare, nu putem adăuga elemente noi după inițializare.
  • Alocarea mai multă memorie decât cerința duce la risipa de spațiu de memorie, iar o alocare mai mică a memoriei poate crea o problemă.
  • Numărul de elemente care urmează să fie 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 matricei sunt stocate secvenţial.
  • Elementele matricei sunt notate folosind indecșii lor respectivi. Primul element este la indicele 0, în timp ce ultimul element este la indicele n-1, unde este numărul total de elemente ale matricei.
  • Declararea unei matrice implică definirea tipurilor de date ale elementelor matricei, precum și a numărului 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 indecșii lor.
  • Elementele matricei sunt accesate folosind indecșii lor.
  • O matrice multidimensională are mai multe dimensiuni.
  • Numele matricei indică primul său element.
  • Matricele au o dimensiune fixă, ceea ce înseamnă că elemente noi nu pot fi adăugate la matrice după inițializare.