adamj57
#programowanie #cpp #cplusplus #c

Halo mirki, potrzebuję pomocy z dość ciekawą sprawą. Jestem noobem w C++ (pochodzę z pythonowego środowiska) i mam zagwostkę:

Jaki typ ma wskaźnik na 2-wymiarową tablicę (10x10) wskaźników na obiekt (Cell)?

Chciałbym zwrócić z funkcji dokładnie taki typ wskaźnika (tak, wiem że teoretycznie vector rozwiązałby sprawę, ale nie w tym rzecz).
Na razie doszedłem do tego, że zmienna tego typu będzie miała typ Cell*(*tmp)[10]. Opcją jest też zwrócenie wskaźnika na wskaźnik na obiekt z początku tablicy, ale to jest nieco zbyt uciążliwe (ręczne liczenie offsetów do wskaźników na kolejne elementy tablicy).
Ma ktoś pomysł? Męczę się z tym już jakąś dobrą chwilę (╯°□°)╯︵ ┻━┻
  • Najlepsze
  • Wszystkie komentarze
adamj57
adamj57 Autor
5
Zanim ktoś wrzuci:
a.....2
a.....2
@adamj57: Normalnie wskaźnik na wskaźnik czyli Cell** - nie musisz ręcznie liczyć offsetów, możesz się potem normalnie odwoływać do elementów przez nawiasy[][]
a.....2
a.....2
@adamj57: Co nie zmienia faktu, że w c++ w ogóle nie możesz zrobić new[x][y].
k.....e
k.....e
@adamj57: to jest od c++11 już dobrze zrobione ;)
koostosh
@adamj57: Cell**
k.....e
k.....e
@adamj57: Robisz to źle, dynamicznie alokujesz pamięć do zwykłego wskaźnika i używasz normalnych tablic. Dwa anty wzorce w 9 linijkach kodu
adamj57
adamj57 Autor
0
@atestowanie2: @koostosh: Ok, dzięki :) Jak widać jeszcze nieco nauki przede mną ¯\_(ツ)_/¯
Saly
Saly
0
Kaczus2B
Kaczus2B
@adamj57: zastanow sie, czy na prawde potrzebujesz cell** moze wystarczy cie std::vector?
adamj57
adamj57 Autor
0
@kebab-case: Jak byś to zrobił?
k.....e
k.....e
@adamj57: Nie powinno się używac zwykłych tablic. Jak chcesz stały rozmiar to std::array, jak dynamiczna tablica to std::vector. Jak alokujesz pamięć to korzystasz ze smart pointerów
a.....2
a.....2
@adamj57: Jeżeli nie chcesz wektorów to najprościej normalnie przemnożyć wymiary i zrobić
Cell** tab = new Cell*[sizeX*sizeY]'
a zamiast liczyć offsety zrób sobie funkcję
Cell* getCell(int x,int y){return tab[y*sizeX+x;}
adamj57
adamj57 Autor
0
@kebab-case: Muszę nieco bardziej pogrzebać w dokumentacji standardu C++17, dzięki!