[C++] Alocare dinamica matrice multi-dimensionala

Despre limbajul de programare C++ si biblioteca standard STL (forum moderat)

[C++] Alocare dinamica matrice multi-dimensionala

Mesajde 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:

Cod: Selectaţi tot
// 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[i][j]:

Cod: Selectaţi tot
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:

Cod: Selectaţi tot
for(int i=0; i < m_nCols; i++)
   delete [] arr[i];

delete [] arr;
nmg
Junior
Junior
 
Mesaje: 43
Membru din: 12 Iul 2007, 07:36

Înapoi la C++

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 2 vizitatori

cron