[C++] Alocare dinamica matrice multi-dimensionala

Despre limbajul de programare C++ si biblioteca standard STL (forum moderat)
Post Reply
nmg
Junior
Junior
Posts: 43
Joined: 12 Jul 2007, 07:36

[C++] Alocare dinamica matrice multi-dimensionala

Post by nmg » 27 Dec 2012, 09:08

Intrebare:
Cum se aloca in mod dinamic matrice multi-dimensionale ?

Solutie:
Solutia consta in declararea unui pointer catre o matrice de pointeri, care va fi apoi initializata cu valorile necesare:

Code: Select all

// declarare:
BOOL **arr = new BOOL*[m_nCols];

// initializare:
for(int i = 0; i < m_nCols; i++)
   arr[i] = new BOOL[m_nRows];
Dupa initializarea, accesul la date se va face dupa metoda obisnuita, untilizand indexul acestora: arr[j]:

Code: Select all

for (int i = 0; i < m_nCols; i++)
	for (int j = 0; j < m_nRows; j++)
		arr[i][j] = FALSE;

Este de subliniat faptul ca, din punct de vedere al accesului la date, este importanta ordinea in care se se declara si se initializeaza matricea. Astfel, pentru a accesa matricea in ordinea normala, arr[x- dimension][y - dimension], este important ca acestea sa se faca conform codului de mai sus, folosind pentru declarare nr. de coloane, si apoi populand randurile cu valori.

In cazul in care matricea se declara folosind initial numarul de randuri, ordinea de acces va fi inversata: arr[y-dimension][x-dimension].


Avand in vedere ca matricea a fost declarata in mod dinamic folosind operatorul new, memoria ocupata de aceasta trebuie eliberata. Eliberarea se va face in ordinea inversa alocarii, folosindu-se operatorul delete[], deoarece eliberam sirurile de pointeri alocati initial:

Code: Select all

for(int i=0; i < m_nCols; i++)
	delete [] arr[i];

delete [] arr;



Post Reply