Mon
23
Jun 2008
Mieliśmy ostatnio w tym wątku forum dyskusję na temat tablic 2D w C++. Sposobów na to jest kilka. Ten najbardziej oczywisty to podwójny wskaźnik, czyli tablica tablic:
int **Tab = new int*[SizeX]; for (int x = 0; x < SizeX; x++) Tab[x] = new int[SizeY]; Tab[x][y] // Odwołanie
Forumowi specjaliści piszą, że metoda z jednowymiarową tablicą jest lepsza, bo wszystko jest w jednym kawałku pamięci, co zapewnia lepszą spójność cache i mniejsze ryzyko wystąpienia problemów ze stronnicowaniem. Co ciekawe, odwołania do takiej tablicy wcale nie są wolniejsze ze względu na mnożenie, bo w kodzie powyżej mnożenie też zachodzi, skoro elementy pierwszej tablicy nie mają przecież wielkości 1 bajtu.
int *Tab = new int[SizeX*SizeY]; Tab[y*SizeX + x] // Odwołanie
Możliwa jest jeszcze inna metoda, ale ona jest już przekombinowana, a poza tym zadziała tylko kiedy drugi wymiar tablicy jest stały.
int (*Tab)[16]; Tab = new int[16][16]; Tab[x][y] // Odwołanie
Comments | #algorithms #c++ Share