|
Przypisanie wiersza tablicy dwuwymiarowej do jednowymiarowej
piter - 15-12-2009 22:25
Przeczytałem w kursie C++ "Od zera do gier kodera", że można przypisać wiersz tablicy dwuwymiarowej do jednowymiarowej w następujący sposób: #include <iostream> using namespace std;
int main() { unsigned aTab2D[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; unsigned aTab1D[3]; aTab1D = aTab2D[0]; }
Jednak przy próbie skompilowania otrzymuje błąd: kod.cc:9: error: invalid array assignment
mq - 15-12-2009 22:58
Coś takiego to mógłbyś (chyba) zrobić w javie, gdzie zmienne aTab2D i aTab1D byłyby referencjami (ruchomymi). W c++ to również są referencje, ale nieruchome, nie możesz ich sobie tak po prostu przypisywać. Z tego co wiem o c++, to przepisania zawartości jednej tablicy (albo jej części) do innej trzeba dokonać w pętli.
beel - 15-12-2009 23:06
To może stronę podasz na której to przeczytałeś w tym kursie?
Rafal_F - 15-12-2009 23:28
W C++ nie można zmieniać adresu na który wskazuje nazwa tablicy. Więc albo przypisanie zrobisz w pętli, albo zmienną aTab1d zrobisz wskaźnikiem na unsigned a nie tablicą: #include <iostream>
using namespace std;
int main() { unsigned aTab2D[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; unsigned *aTab1D;
aTab1D = aTab2D[0]; }
piter - 16-12-2009 09:35
beel napisał: Kurs znajduje się tu: http://www.gamedev.pl/files/articles...Kurs%20C++.pdf
Strona nr 122
[ Dodano: |16 Gru 2009|, 2009 22:05 ] Rafal_F napisał: Pętla jest chyba najbardziej oczywistym rozwiązaniem, które jako pierwsze nasunęło mi się na myśl. Przykład, który podałem jest bardzo prosty - wystarczy zastosować jedną pętle. Sytuacja komplikuje się gdy tablice będą miały więcej wymiarów - wtedy trzeba robić pętle w pętli np: #include <iostream> using namespace std;
int main() { unsigned aTab3D[2][2][2] = { { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } }; unsigned aTab2D[2][2]; for (unsigned i = 0; i < 2; ++i) for (unsigned j = 0; j < 2; ++j) aTab2D[i][j] = aTab3D[0][i][j]; }
Rozwiązanie podane w kursie: aTab2D = aTab3D[0];
jest znacznie prostsze niż użycie kilku pętli: for (unsigned i = 0; i < 2; ++i) for (unsigned j = 0; j < 2; ++j) aTab2D[i][j] = aTab3D[0][i][j];
Niestety nie działa.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|