n-wymariowe tablice

n-wymariowe tablice
hdw3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
1

Witam!

Jest jakiś sposób żeby utworzyć dynamicznie n-wymiarową tablice, np. pod parametr n ktoś podaje 3 i powstaje tablica tab[][][] ?

Znalazłem na jakimś forum post z 2009 na ten temat i ktoś dał taki pomysł, ale nie jestem pewien matematyki stojącej za tym rozwiązaniem i zastanawiam się czy może istnieje jakiś inny sposób do stworzenia n-wymiarowej tablicy:

"

This is a rather bizarre request. But it can be done.

You can create an n-dimensional array of dimensionsD1, D2, D3, ..., Dn by creating a one dimensional array of size (D1 * D2 * D3 * ... * Dn). Then you access an element at position```
(x1, x2, x3, ... ,xn)

Kopiuj

array[x1 * (D2 * D3 * ... Dn) + x2 (D3 * D4 * ... Dn) + ... + xn].

Kopiuj



====================
Example: Creating a 4-dimensional array of sizes

3,2,5,7 (i.e. array[3][2][5][7]).

Kopiuj

Create an array of size ```
(3 * 2 * 5 * 7)
```. Say, you want to access an element at position ```
(2, 0, 4, 1)
```. The index of the array will be calculated as such:

2 * (2 * 5 * 7) + 0 * (5 * 7) + 4 * (7) + 1.

Kopiuj

"
edytowany 3x, ostatnio: hdw3
kq
W tagach brakuje języka.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:12 minut
1

Zawsze możesz stworzyć tablicę jednowymiarową a indeks wyliczać ręcznie z użyciem dowolnej ilości wymiarów.

This is a rather bizarre request

No właśnie. Po co ci to? :-)

hdw3
Jeden z wymogów w zadaniu na studia
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
3

W tagach umieściłeś wszystko, poza językiem którego pytanie dotyczy, więc zakładam C++. Możesz użyć szablonu opakowującego mojego autorstwa: https://github.com/KrzaQ/cpp_stuff/blob/master/include/kq/matrix_view.hpp

https://dsp.krzaq.cc/post/448/n-wymiarowy-widok-na-macierz-w-cxx/


edytowany 1x, ostatnio: kq
Zobacz pozostały 1 komentarz
MarekR22
a jak sam zacząłem to pisać to wygląda niemal identycznie :).
MarekR22
@kq rzucanie wyjątku oraz #ifdef DEBUG wciągnąłbym do środka verify_coordinates (zwłaszcza, że jest to metoda protected). Zredukuje to liczbę "if-ów" if "ifdef-ów".
Bartosz36
@kq: W linijce 151: operator--(int) inkrementuje *this. Jeśli taki był zamiar to wytłumacz, a jeśli bug to informuję skoro ktoś ma z tego korzystać :)
kq
@MarekR22 @Bartosz36 dzięki za sugestie, code review jest zawsze mile widziany :)
kq
Poprawki wrzucone, jeszcze raz dzięki za review i że chciało się Wam w to wgryzać :​)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.