To mi przeszkadzało przez pewien czas. Wiele razy robię duży bufor, aby pomieścić "maksymalną" ilość danych. Pomaga mi to uniknąć dynamicznego przydzielania i deallocacji bufora za każdym razem, gdy zmienia się rozmiar następnego zestawu danych.Dostęp do tablicy 1D jako tablicy 2D w C++
Na przykład mówię, że mam tablicę, która jest zbyt duża ze względu na jej rzeczywisty rozmiar, ale znam długość użytecznych danych.
int amountOfData = 9;
char data1D[100] = some data that is only 9 bytes long stored in a 100 byte array
Powiedzmy, że mam algorytm, który chcę uruchomić na tym zestawie danych, który korzysta z indeksowania tablicy 2D. Tak, chcę być w stanie uzyskać dostęp do danych w następujący sposób:
cout << "I am accessing this data as a 2D array: " << data1D[0][1] << endl;
Powiedzmy dla tego algorytmu wiem, że xlength i ylength tablicy 2D będą:
int xlength = 3;
int ylength = 3;
tego iteracja, ponieważ amountOfData = 9
. Jednak długości mogą być różne dla następnej iteracji. To znaczy. mogą być xlength = 4
i ylength = 4
podane amountOfData = 16
.
Chcę wykonać rzut, który pozwoli mi obsadzić tablicę 1D za pomocą indeksowania tablicy 2D. Wiem, ile czasu zajmuje moja początkowa długość 1D, co mówi mi, jak długie są moje 2D xlength
i ylength
, więc powinno to być łatwe do wykonania bez użycia new
lub malloc
, o ile początkowe 100 bajtów jest wystarczająco długie, aby pomieściło jakikolwiek pożyteczny zestaw danych Dla mnie.
Zdaję sobie sprawę, że:
char** data2d = (char**) data1D;
nie będzie działać, ponieważ kompilator nie zna wielkość drugiego wymiaru. Ale będę wiedzieć, co to jest w czasie wykonywania!
Jaki jest podstawowy powód takiego stanu rzeczy? Czy są jakieś obejścia? Czy brakuje mi czegoś?
Zajrzyj do [wektory] (http://en.cppreference.com/w/cpp/container/vector). –
Jakich typów oczekujesz w data1D? – Amadeus
@ Tomas Badan Użyłem 'char's jako przykładu, ale konkretny przypadek tego problemu powstał dzisiaj, kiedy chciałem uzyskać dostęp do tablicy 1D 'unsigned char's jako tablicy 2D' unsigned short's. Tablica 1D została wypluwana z zastrzeżonego oprogramowania kamery. Chcę uzyskać wynikowy obraz jako dane 2D w pikselach. – dinkelk