În C++, o matrice este o structură de date care este utilizată pentru a stoca mai multe valori de tipuri de date similare într-o locație de memorie adiacentă.
De exemplu , dacă trebuie să stocăm notele a 4 sau 5 studenți, atunci le putem stoca cu ușurință prin crearea a 5 variabile diferite, dar dacă vrem să stocăm notele a 100 de elevi sau să spunem 500 de elevi, atunci devine foarte dificil să creăm acele numere de variabile si gestioneaza-le. Acum intră în imagine matricele care o pot face cu ușurință prin simpla creare a unei matrice de dimensiunea necesară.
Proprietățile tablourilor în C++
- O matrice este o colecție de date de același tip de date, stocate într-o locație de memorie adiacentă.
- Indexarea unui tablou începe de la 0. Înseamnă că primul element este stocat la indicele 0, al doilea la primul și așa mai departe.
- Elementele unui tablou pot fi accesate folosind indicii lor.
- Odată ce o matrice este declarată, dimensiunea sa rămâne constantă pe tot parcursul programului.
- O matrice poate avea mai multe dimensiuni.
- Mărimea matricei în octeți poate fi determinată de operatorul sizeof cu ajutorul căruia putem găsi și numărul de elemente din matrice.
- Putem găsi dimensiunea tipului de elemente stocate într-o matrice scăzând adresele adiacente.
Declarație de matrice în C++
În C++, putem declara o matrice specificând mai întâi tipul de date și apoi numele unei matrice cu dimensiunea sa.
data_type array_name[Size_of_array];>
Exemplu
int arr[5];>
Aici,
- int: Este tipul de date care trebuie stocate în matrice. Putem folosi și alte tipuri de date, cum ar fi char, float și double.
- arr: Este numele matricei.
- 5: Este dimensiunea matricei, ceea ce înseamnă că numai 5 elemente pot fi stocate în matrice.
Inițializarea Array în C++
În C++, putem inițializa o matrice în multe feluri, dar vom discuta câteva modalități cele mai comune de a inițializa o matrice. Putem inițializa o matrice în momentul declarării sau după declarare.
1. Inițializați tabloul cu valori în C++
Am initializat matricea cu valori. Valorile cuprinse între acolade „{}” sunt atribuite matricei. Aici, 1 este stocat în arr[0], 2 în arr[1] și așa mai departe. Aici dimensiunea matricei este 5.
int arr[5] = {1, 2, 3, 4, 5};>
2. Inițializați Array cu valori și fără dimensiune în C++
Am inițializat matricea cu valori, dar nu am declarat lungimea matricei, prin urmare, lungimea unei matrice este egală cu numărul de elemente din acolade.
iarnă triplă
int arr[] = {1, 2, 3, 4, 5};>
3. Inițializați matricea după declarație (folosind bucle)
Am inițializat matricea folosind o buclă după declararea matricei. Această metodă este utilizată în general atunci când dorim să luăm input de la utilizator sau nu putem aloca elemente unul câte unul fiecărui index al matricei. Putem modifica condițiile buclei sau putem modifica valorile de inițializare în funcție de cerințe.
for (int i = 0; i arr[i] = value; }>
4. Inițializați o matrice parțial în C++
Aici, am declarat o matrice „partialArray” cu dimensiunea „5” și doar cu valorile „1” și „2”. Deci, aceste valori sunt stocate la primii doi indici, iar la restul indicilor este stocat „0”.
int partialArray[5] = {1, 2};>
5. Inițializați tabloul cu zero în C++
Putem inițializa matricea cu toate elementele ca „0” specificând „0” în interiorul acoladelor. Acest lucru se va întâmpla în caz de zero numai dacă încercăm să inițializam matricea cu o valoare diferită, să spunem „2” folosind această metodă, atunci „2” este stocat doar la indexul 0.
int zero_array[5] = {0};>
Accesarea unui element al unui tablou în C++
Elementele unei matrice pot fi accesate prin specificarea numelui matricei, apoi a indexului elementului inclus în operatorul subscript matrice []. De exemplu, arr[i].
Exemplul 1: Programul C++ pentru a ilustra cum se accesează elementele matricei
C++ // C++ Program to Illustrate How to Access Array Elements #include using namespace std; int main() { int arr[3]; // Inserting elements in an array arr[0] = 10; arr[1] = 20; arr[2] = 30; // Accessing and printing elements of the array cout << 'arr[0]: ' << arr[0] << endl; cout << 'arr[1]: ' << arr[1] << endl; cout << 'arr[2]: ' << arr[2] << endl; return 0; }>
Ieșire
arr[0]: 10 arr[1]: 20 arr[2]: 30>
Actualizați elementul Array
Pentru a actualiza un element dintr-o matrice, putem folosi indexul pe care vrem să-l actualizăm inclus în operatorul de subindice de matrice și să atribuim noua valoare.
arr[i] = new_value;>
Parcurgeți o matrice în C++
Putem parcurge matricea cu ajutorul unei bucle folosind indexarea în C++. În primul rând, am inițializat o matrice „table_of_two” cu un multiplu de 2. După aceea, rulăm o buclă for de la 0 la 9, deoarece într-o matrice indexarea începe de la zero. Prin urmare, folosind indici, imprimăm toate valorile stocate într-o matrice.
Exemplul 2: Programul C++ pentru a ilustra cum se traversează o matrice
C++ // C++ Program to Illustrate How to Traverse an Array #include using namespace std; int main() { // Initialize the array int table_of_two[10] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }; // Traverse the array using for loop for (int i = 0; i < 10; i++) { // Print the array elements using indexing cout << table_of_two[i] << ' '; } return 0; }>
Ieșire
2 4 6 8 10 12 14 16 18 20>
Dimensiunea unui tablou în C++
În C++, nu avem funcția de lungime ca în Java pentru a găsi dimensiunea matricei, dar putem calcula dimensiunea unui tablou folosind operatorul sizeof(). truc. În primul rând, găsim dimensiunea ocupată de întreaga matrice în memorie și apoi o împărțim la dimensiunea tipului de element stocat în matrice. Acest lucru ne va oferi numărul de elemente stocate în matrice.
data_type size = sizeof(Array_name) / sizeof(Array_name[index]);>
Exemplul 3: Programul C++ pentru a ilustra cum să găsiți dimensiunea unui tablou
C++ // C++ Program to Illustrate How to Find the Size of an // Array #include using namespace std; int main() { int arr[] = { 1, 2, 3, 4, 5 }; // Size of one element of an array cout << 'Size of arr[0]: ' << sizeof(arr[0]) << endl; // Size of array 'arr' cout << 'Size of arr: ' << sizeof(arr) << endl; // Length of an array int n = sizeof(arr) / sizeof(arr[0]); cout << 'Length of an array: ' << n << endl; return 0; }>
Ieșire
Size of arr[0]: 4 Size of arr: 20 Length of an array: 5>
Relația dintre tablouri și pointeri în C++
În C++, tablourile și pointerii sunt strâns legate între ele. Numele matricei este tratat ca un pointer care a stocat adresa de memorie a primului element al matricei. După cum am discutat mai devreme, elementele din matrice sunt stocate în locații de memorie adiacente, de aceea putem accesa toate elementele unei matrice folosind numele matricei.
Exemplul 4: Ilustrarea relației dintre matrice și pointeri
C++ // C++ Program to Illustrate that Array Name is a Pointer // that Points to First Element of the Array #include using namespace std; int main() { // Defining an array int arr[] = { 1, 2, 3, 4 }; // Define a pointer int* ptr = arr; // Printing address of the arrary using array name cout << 'Memory address of arr: ' << &arr << endl; // Printing address of the array using ptr cout << 'Memory address of arr: ' << ptr << endl; return 0; }>
Ieșire
Memory address of arr: 0x7fff2f2cabb0 Memory address of arr: 0x7fff2f2cabb0>
Explicaţie:
În codul de mai sus, definim mai întâi o matrice arr și apoi declară un pointer ptr și atribuiți-i matricea arr. Putem atribui arr la ptr deoarece arr este, de asemenea, un pointer. După aceea, imprimăm adresa de memorie a arr folosind operator de referință ( & ) și, de asemenea, tipăriți adresa stocată în pointer ptr și putem vedea arr și ptr, ambele stochează aceeași adresă de memorie.
Exemplul 5: Imprimarea elementelor de matrice fără indexare în C++
În general, accesăm și imprimăm elementele matricei folosind indexare. De exemplu pentru a accesa primul element pe care îl folosim nume_matrice[0]. Am discutat mai sus că numele matricei este un pointer care a stocat adresa primului element și elementele matricei sunt stocate în locații învecinate. Acum, vom accesa elementele unei matrice folosind numai numele matricei.
C++ // C++ Program to Print Array Elements without Indexing #include using namespace std; int main() { // Define an array int arr[] = { 11, 22, 33, 44 }; // Print elements of an array cout << 'first element: ' << *arr << endl; cout << 'Second element: ' << *(arr + 1) << endl; cout << 'Third element: ' << *(arr + 2) << endl; cout << 'fourth element: ' << *(arr + 3) << endl; return 0; }>
Ieșire
first element: 11 Second element: 22 Third element: 33 fourth element: 44>
Explicaţie
În codul de mai sus, am declarat mai întâi o matrice arr cu patru elemente. După aceea, imprimăm elementele matricei. Să discutăm cum o facem. Am discutat că numele matricei este un pointer care stochează adresa primului element al unui tablou, astfel încât, pentru a imprima primul element, am dereferențiat acel pointer (*arr) folosind operatorul de dereferențiere (*) care tipărește datele stocate la adresa respectivă.
Pentru a imprima al doilea element al unui tablou, mai întâi adăugăm 1 la arr care este echivalent cu (adresa arr + size_of_one_element *1) care duce indicatorul la adresa imediat după prima și după aceea, dereferențiăm acel pointer pentru a imprima al doilea element. În mod similar, imprimăm restul elementelor unui tablou fără a folosi indexarea.
Trecerea Array la Funcție în C++
Pentru a folosi matrice eficient, ar trebui să știm cum să trecem matricele la funcționare. Putem trece matrice la funcții ca argument, la fel cum trecem variabile la funcții, dar știm că numele matricei este tratat ca un pointer folosind acest concept, putem trece matrice la funcții ca argument și apoi accesăm toate elementele acelei matrice folosind indicator.
Deci, până la urmă, tablourile sunt întotdeauna transmise ca pointeri către funcție. Să vedem 3 moduri de a transmite o matrice unei funcții care sunt utilizate în principal.
1. Transmiterea Array ca Pointer
În această metodă, pur și simplu trecem numele matricei în apelul funcției, ceea ce înseamnă că trecem adresa primului element al matricei. În această metodă, putem modifica elementele matricei din funcție.
Sintaxă
return_type function_name ( data_type *array_name ) { // set of statements }>
2. Trecerea matricei ca matrice nedimensionată
În această metodă, funcția acceptă matricea folosind o declarație de matrice simplă fără dimensiune ca argument.
Sintaxă
return_type function_name ( data_type array_name[] ) { // set of statements }>
3. Transmiterea Array ca Sized Array
În această metodă, funcția acceptă matricea folosind o declarație de matrice simplă cu dimensiunea ca argument. Folosim această metodă prin dimensionarea unei matrice doar pentru a indica dimensiunea unei matrice.
Sintaxă
return_type function_name(data_type array_name[size_of_array]){ // set of statements }>
Notă: Array va fi tratat ca un pointer în funcția transmisă, indiferent de metoda pe care o folosim. Pe măsură ce matricea este transmisă ca pointeri, ei vor pierde informațiile despre dimensiunea sa conducând la un fenomen numit ca Dezintegrarea matricei.
Exemplu: Ilustrarea diferitelor moduri de a trece matrice la o funcție
C++ #include using namespace std; // passing array as a sized array argument void printArraySized(int arr[3], int n) { cout << 'Array as Sized Array Argument: '; for (int i = 0; i < n; i++) { cout << arr[i] << ' '; } cout << endl; } // passing array as an unsized array argument void printArrayUnsized(int arr[], int n) { cout << 'Array as Unsized Array Argument: '; for (int i = 0; i < n; i++) { cout << *(arr + i) << ' '; } cout << endl; } // Passing array as a pointer argument void printArrayPointer(int* ptr, int n) { // Print array elements using pointer ptr // that store the address of array passed cout << 'Array as Pointer Argument: '; for (int i = 0; i < n; i++) { cout << ptr[i] << ' '; } } // driver code int main() { int arr[] = { 10, 20, 30 }; // Call function printArray and pass // array and its size to it. printArraySized(arr, 3); printArrayUnsized(arr, 3); printArrayPointer(arr, 3); return 0; }>
Ieșire
Array as Sized Array Argument: 10 20 30 Array as Unsized Array Argument: 10 20 30 Array as Pointer Argument: 10 20 30>
Matrice multidimensionale în C++
Matricele declarate cu mai multe dimensiuni sunt numite tablouri multidimensionale. Cele mai utilizate matrice multidimensionale sunt matricele 2D și matricele 3D. Aceste matrice sunt în general reprezentate sub formă de rânduri și coloane.
Declarație de matrice multidimensională
Data_Type Array_Name[Size1][Size2]...[SizeN];>
Unde,
- Data_Type: Tipul de date care urmează să fie stocate în matrice.
- Nume_Matrice: Numele matricei.
- Mărimea 1, Mărimea 2,…, Mărimea N: Dimensiunea fiecărei dimensiuni.
Matrice bidimensională în C++
În C++, o matrice bidimensională este o grupare de elemente aranjate în rânduri și coloane. Fiecare element este accesat folosind doi indici: unul pentru rând și unul pentru coloană, ceea ce îl face ușor de vizualizat ca tabel sau grilă.
Sintaxa matricei 2D
data_Type array_name[n][m];>
Unde,
- n: Număr de rânduri.
- m: Numar de coloane.
Exemplu: Programul C++ pentru a ilustra matricea bidimensională
C++ // c++ program to illustrate the two dimensional array #include using namespace std; int main() { // Declaring 2D array int arr[4][4]; // Initialize 2D array using loop for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { arr[i][j] = i + j; } } // Printing the element of 2D array for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { cout << arr[i][j] << ' '; } cout << endl; } return 0; }>
Ieșire
0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6>
Explicaţie
În codul de mai sus am declarat o matrice 2D cu 4 rânduri și 4 coloane după care am inițializat matricea cu valoarea (i+j) în fiecare iterație a buclei. Apoi tipărim matricea 2D folosind o buclă imbricată și putem vedea în rezultatul de mai jos că există 4 rânduri și 4 coloane.
Matrice tridimensională în C++
Matricea 3D folosește trei dimensiuni. O colecție de diferite matrice bidimensionale îngrămădite una peste alta poate fi folosită pentru a o reprezenta. Trei indici — indexul rândurilor, indexul coloanei și indicele adâncimii sunt utilizați pentru a identifica în mod unic fiecare element dintr-o matrice 3D.
Declarația matricei tridimensionale în C++
Pentru a declara o matrice 3D în C++, trebuie să specificăm a treia dimensiune a acesteia împreună cu dimensiunile 2D.
Data_Type Array_Name[D][R][C];>
Unde,
- Data_Type: Tip de date care trebuie stocate în fiecare element.
- Nume_Matrice: Numele matricei
- D: Numărul de matrice 2D sau Adâncimea matricei.
- R: Numărul de rânduri din fiecare matrice 2D.
- C: Numărul de coloane din fiecare matrice 2D.
Exemplu
int array[3][3][3];>
Exemplu: Programul C++ pentru a ilustra tabloul 3d
C++ // C++ program to illustrate the 3d array #include using namespace std; int main() { // declaring 3d array int arr[3][3][3]; // initializing the array for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { arr[i][j][k] = i + j + k; } } } // printing the array for (int i = 0; i < 3; i++) { cout << i << 'st layer:' << endl; for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { cout << arr[i][j][k] << ' '; } cout << endl; } cout << endl; } return 0; }>
Ieșire
0st layer: 0 1 2 1 2 3 2 3 4 1st layer: 1 2 3 2 3 4 3 4 5 2st layer: 2 3 4 3 4 5 4 5 6>
Explicaţie
În codul de mai sus, am declarat o matrice 3D și apoi am inițializat-o folosind trei bucle for imbricate. După aceea, am imprimat din nou toate straturile matricei 3D folosind trei bucle for imbricate, așa cum se vede în rezultat.
Articole similare
- Matrice multidimensionale în C++
- Proprietățile Array
- Dezintegrarea matricei