Tablice 2D

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

# Tablice 2D

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

Comments

STAT NO AD
[Stat] [STAT NO AD] [Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2019