ison |
» 2011-05-20 20:30:48 char ** CreateDoubleArray( const int w, const int h ) { char ** ret = new char *[ w ]; for( int i = 0; i < w; ++i ) { ret[ i ] = new char[ h ]; } return ret; }
void DestroyDoubleArray( int ** Array, const int w ) { for( int i = 0; i < w; ++i ) { delete[] Array[ i ]; } delete[] Array; }
użycie: char ** array = CreateDoubleArray( 100, 100 ); ... DestroyDoubleArray( array, 100 );
|
|
absflg |
» 2011-05-20 23:13:47 Możesz też korzystać z tablicy jednowymiarowej jak z dwuwymiarowej:
int rozmiar_x, rozmiar_y, x, y, nr;
int * tab = new int[ rozmiar_x * rozmiar_y ];
tab[ y * rozmiar_x + x ];
y = int( nr / rozmiar_x ); x = nr % rozmiar_x;
|
|
Mrowqa |
» 2011-05-21 14:24:34 ehh ... char( * tab )[ 10 ]; int n; cin >> n; tab = new char[ n ][ 10 ];
Dalej korzystasz jak ze zwykłej tablicy 2D. Element który oznaczyłem musi być podany w trakcie kompilacji. Mimo tego ograniczenia zazwyczaj to starcza ^^ Jeśli Ci to nie pomoże - będziesz musiał się męczyć nad tym co koledzy wyżej Ci napisali :P Pozdrawiam, Mrowqa |
|
absflg |
» 2011-05-21 15:25:51 Takie dwuwymiarowe się raczej do niczego nie przydają. Trudno mówić o "raczej wystarczy" gdy nie wiemy do czego to ma służyć. Głupotą by było dla powierzchni kwadratowej o rozmiarach w zakresie 10x10 do 2500x2500 rezerwować na zapas 5000x5000 w pamięci na każdą (i jeszcze sztuczne przez to ograniczanie wielkości tej tablicy). Przy dużej ilości takich pseudomałych tablic może się stać to widoczne. |
|
Mrowqa |
» 2011-05-21 16:55:33 @upNie wiem jak inni, ale ja jeśli potrzebuje np. dynamicznie zaalokować tablicę 10x8x32 to po prostu tworzę specjalny wskaźnik i jadę z koksem. Tzn. tworzę to, co na daną chwilę jest potrzebne i oszczędzam w miarę pamięć :P Nic nie mówię o tym, że tworzę tablicę 5000x5000 i raz jej użyję do tego a innym razem do tego ... po prostu tworzę wskaźnik ( a on mało zajmuje ) i operatorem new alokuję sobie tablicę wystarczająco dużą na daną chwilę. ( To na szczęście u mnie nie jest często operacja :P więc zazwyczaj to starcza ^^ ). gdy nie wiemy do czego to ma służyć. |
Wnioskując po tych słowach alokujesz tablicę nawet nie wiedząc do czego ma służyć tylko tak po prostu bo Ci się tak podoba. Nie wiem jak inni ( bo może to ja jestem jakiś inny :P ), ale ja alokuję tablicę w jakimś celu. Wtedy wiem, jaki wskaźnik przygotować ( a jak wszyscy wiemy - wskaźnik jest lekki ( mało zajmuje w pamięci ), więc chyba lepiej zrobić sobie kilka wskaźników niż zbędnie wielką tablicę ). Pozdrawiam, Mrowqa |
|
absflg |
» 2011-05-21 17:36:45 @up
W pierwszym poście było, że tablica ma być kwadratowa, a jej wielkość niewpisana w program. Należałoby więc jako stałą podać wielkość maksymalną tablicy. Takie tworzenie tablicy wielowymiarowej ma sens tylko gdy pozostałe wymiary są ściśle ustalone.
I oczywiście, że nie wiemy do czego ma służyć, gdyż autor tematu nic o tym nie napisał. Należałoby więc przyjąć, że tablica ta może mieć dowolny rozmiar. A trudno przecież w przypadku stałej mówić o dowolności. |
|
Mrowqa |
» 2011-05-21 17:57:57 @up Wiesz, to co ja napisałem to była taka mała rada ode mnie, a nie rozwiązanie :P Tak po za tym nigdzie tam nie widzę czegoś o tym, że ma być kwadratowa ... nie sugeruj się tym, że dał tam [ n ][ n ], a pozostali tworzyli właśnie kwadratowe tablice. Może i autorowi chodzi o tablicę kwadratową, aczkolwiek o tym nie wspomniał!!! ( a ty piszesz, że wspomniał po to... właśnie po co ?? :P by zlikwidować mój błyskliwy pomysł ? :D ). Tak jak nie wspomniał o tablicy kwadratowej, tylko o dwuwymiarowej tak ja poddałem pomysł stworzenia takowej :P Czytaj ze zrozumieniem :D
Pozdrawiam, Mrowqa |
|
1 « 2 » |