W12 dynamiczne tablice 2d, PWR - Informatyka W4, podstawy programowania
[ Pobierz całość w formacie PDF ]
Przykłady dynamicznego tworzenia i usuwania ró Ŝ nych wariantów tablicy dwuwymiarowej ® int [2][3] Przykład A) dla porównania ® zwykła tablica dwuwymiarowa int tab_A [ 2 ] [ 3 ]; // przykładowe operacje tab_A[0][0] = 200; tab_A[0][1] = 201; tab_A[1][0] = 210; tab_A[1][1] = tab_A[1][2]; // nie trzeba oprogramowywa ć operacji usuwania tablicy A // bo jej tworzenie i usuwanie jest realizowane przez kompilator ! } Przykład B) Wska ź nik na dwuwymiarow ą dynamiczn ą tablic ę liczb całkowitych Uwaga: taka reprezentacja jest bardzo niewygodna w zapisie, bo wsz ę dzie trzeba dopisywa ć operator „gwiazdki” lub [0] void main( ) { int (*tab_B) [ 2 ] [ 3 ]; tab_B = new int[1][2][3]; // dynamiczna alokacja tablicy tab_B // przykładowe operacje na takiej tablicy B (*tab_B)[0][0] = 200; // tab_B[0][0][0] = 200; (*tab_B)[0][1] = 201; // tab_B[0][0][1] = 201; (*tab_B)[1][0] = 210; // tab_B[0][1][0] = 210; (*tab_B)[1][1] = (*tab_B)[1][2]; // tab_B[0][1][1] = tab_B[0][1][2]; delete [ ] tab_B; // zwolnienie pami ę ci } #include <alloc.h> // to samo, za pomoc ą tradycyjnych funkcji malloc i free tab_B = ( int(*)[2][3] )malloc( 2*3*sizeof(int) ); // utworzenie (*tab_B)[0][0] = 200; // tab_B[0][0][0] = 200; free( tab_B ); // zwolnienie M. Piasecki: JĘZYKI PROGRAMOWANIA (1) - 1 - (W12) Dynamiczne tablice 2D void main( ) { int tab_A [ 2 ] [ 3 ]; int tab_A [ 2 ] [ 3 ]; int (*tab_B) [ 2 ] [ 3 ]; int (*tab_B) [ 2 ] [ 3 ]; Przykład C) Wska ź nik na pierwsz ą 3-elementow ą tablic ę (pierwsz ą z dwóch) void main( ) { int (*tab_C) [ 3 ]; int (*tab_C) [ 3 ]; // dynamiczna alokacja tablicy tab_C tab_C[0][0] = 200; // przykładowe operacje na tablicy tab_C tab_C[0][1] = 201; tab_C[1][0] = 210; tab_C[1][1] = tab_C[1][2]; delete [ ] tab_C; // zwolnienie pami ę ci tab_C } #include <alloc.h> // to samo, za pomoc ą tradycyjnych funkcji malloc i free tab_C = ( int(*)[3] ) malloc( 2*3*sizeof(int) ); // utworzenie tab_C[0][0] = 200; free( tab_C ); // zwolnienie Przykład D) Zwykła dwuelementowa tablica wska ź ników na dynamiczne tablice liczb int *tab_D [ 2 ]; tab_D[0] = new int [3]; // pierwszy wiersz int *tab_D [ 2 ]; dynamiczna alokacja tab_D[1] = new int [3]; // drugi wiersz tab_D[0][0] = 200; // przykładowe operacje na tablicy tab_D tab_D[0][1] = 201; tab_D[1][0] = 210; tab_D[1][1] = tab_D[1][2]; delete [ ] tab_D[0]; // pierwszy wiersz ¬ zwolnienie pami ę ci delete [ ] tab_D[1]; // drugi wiersz } #include <alloc.h> // to samo, za pomoc ą tradycyjnych funkcji malloc i free tab_D[0] = (int*)malloc(3*sizeof(int)); tab_D[1] = (int*)malloc(3*sizeof(int)); tab_D[0][0] = 200; free( tab_D[0] ); free( tab_D[1] ); M. Piasecki: JĘZYKI PROGRAMOWANIA (1) - 2 - (W12) Dynamiczne tablice 2D int (*tab_C) [ 3 ]; tab_C = new int [2][3]; void main( ) { int *tab_D [ 2 ]; ¬ Przykład E) Wska ź nik na dynamiczn ą (dwuelementow ą ) tablic ę wska ź ników, na dynamiczne (trzyelementowe) tablice liczb całkowitych void main( ) { int **tab_E; // Dwuetapowe tworzenie tablicy -> najpierw tablica z adresami wierszy tab_E = new int* [2]; // tablica dwóch wska ź ników // dopiero potem, dwie tablice zawieraj ą ce wiersze tab_E[0] = new int [3]; // pierwszy wiersz tab_E[1] = new int [3]; // drugi wiersz tab_E[0][0] = 200; // przykładowe operacje na tablicy E tab_E[0][1] = 201; tab_E[1][0] = 210; tab_E[1][1] = tab_E[1][2]; // zwolnienie obszaru zajmowanego przez tablic ę E delete [ ] tab_E[0]; // zwolnienie pierwszego wiersza delete [ ] tab_E[1]; // zwolnienie drugiego wiersza delete [ ] tab_E ; // dopiero na koniec, zwolnienie tablicy wska ź ników } // zazwyczaj operacja alokowania i zwalniania wierszywykonywana jest w p ę tli: for( int i=0; i<ILOSC_WIERWSZY; i++) delete [ ] tab_E[ i ]; // zwolnienie i-tego wiersza delete [ ] tab_E ; // dopiero na koniec, zwolnienie tablicy wska ź ników #include <alloc.h> // to samo, za pomoc ą tradycyjnych funkcji malloc i free tab_E = (int**)malloc( 2*sizeof(int*) ); // tworzenie tablicy wska ź ników tab_E[0] = (int*)malloc( 3*sizeof(int) ); // pierwszy wiersz tab_E[1] = (int*)malloc( 3*sizeof(int) ); // drugi wiersz tab_E[0][0] = 200; // przykładowe operacje na tablicy E // zwolnienie obszaru zajmowanego przez tablic ę E free( tab_E[0] ); // zwolnienie pierwszego wiersza free( tab_E[1] ); // zwolnienie drugiego wiersza free( tab_E ); // dopiero na koniec, zwolnienie tablicy wska ź ników M. Piasecki: JĘZYKI PROGRAMOWANIA (1) - 3 - (W12) Dynamiczne tablice 2D int **tab_E; int **tab_E; [ Pobierz całość w formacie PDF ] |