Dynamiczna alokacja tablicy wielowymiarowej.

0

Witam.

Otóż, dostałem do zrobienia w szkole programik, który zaczyna się tak, że użytkownik podaje rozmiar tablicy tj. ilość wierszy i kolumn, oznaczone jako m i n. Z tego ma się zrobić tablica. O ile alokacja dynamiczna tablicy na stercie jest prosta w przypadku tablicy jednowymiarowej, o tyle w przypadku wielowymiarowej już się gubię. Tablicę jednowymiarową lokuje się tak:

int *tab;

	tab=(int*)(m*sizeof(int));

A jak to zrobić z tablicą wielowymiarową?
Szukałem pomocy u wujka google, ale ciągle nie jarze całości tematu.

Z góry dziękuję za pomoc.

0
int **t = new int*[n];
for(int i = 0; i < n; i++) 
    t[i] = new int[m];
0

Masz dwie opcje:

  1. C- style
int **tab;
tab=(int**)malloc(M*sizeof(int*));
for(int m=0;m<M;++m) tab[m]=(int*)malloc(N*sizeof(int));

C++- style jak w poście wyżej. użycie:

tab[m][n]=...
  1. C- style
int *tab=(int*)malloc(M*N*sizeof(int));

C++- styleint tab=new int[MN];

użycie:<code class="c">tab[m*N+n]=...
1

Best of both worlds (powiedzmy, w każdym razie mój ulubiony sposób):

int *data = new int[M * N];
int **arr = new int*[M];
for (int i = 0; i < M; i++) { arr[i] = &data[i * N]; }

Czyli tablica data zawierająca faktyczne dane + tablica arr służąca jako ładny wielowymiarowy interfejs dla danych.
Przewaga nad (1) - mniej alokacji pamięci, alokowanie jednego dużego bloku pamięci jest bardziej opłacalne niż wielu małych
Przewaga nad (2) - łatwiejszy/ładniejszy dostęp do danych
Wady - dwie tablice do zwalniania, trochę wolniejsze niż (2).

0

Spoko, poradziłem sobie. Dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1