Próbowałem skopiować dwuwymiarową tablicę do innej macierzy o innym rozmiarze. Na przykład pierwsza tablica w 4 wierszy i 4 kolumnyKopiowanie dwuwymiarowych elementów tablicy do innej dwuwymiarowej tablicy o innym rozmiarze
1 2 3 4
5 6 7 8
9 0 1 2
3 4 5 6
drugi układ 2 wierszy i 8 kolumn:
1 2 3 4 5 6 7 8
9 0 1 2 3 4 5 6
i jeśli w nowej tablicy więcej elementów niż pierwszy wtedy funkcja zapełni ją 0
to jest funkcja, którą zrobiłem, ale problem z indeksami. Jak napisać to we właściwy sposób?
void changearr(int **ppm, int size1, int size2, int size_1, int size_2)
{
int **temp = new int*[size_1];
for (int i = 0; i < size_1; i++)
temp[i] = new int[size_2];
int z = 0;
for (int i = 0; i < size_1; i++, z++)
{
for (int j = 0, k = 0; j < size_2; j++, k++)
{
if (i < size_1 || j < size_2)
{
temp[i][j] = ppm[z][k];
}
else
temp[i][j] = 0
}
}
Wystarczy pętli na pierwszej tablicy za pomocą i i j. Indeksy z i k dla drugiej macierzy muszą być oszacowane z i i j, nie pętli ponad z i k. –
Ponieważ tablica jest ciągła w pamięci, tablice są prawie takie same w sposobie ich przechowywania. Pytanie brzmi, jaki poziom kontroli potrzebujesz w swojej funkcji. Czego chcesz pod warunkiem, że miejsce docelowe jest mniejsze niż źródło? I jak już wspomniano poniżej, czy musi działać tylko dla tablic, czy też dla szeregu wskaźników? Ponieważ jeśli dane są ciągłe w pamięci, możesz to zrobić w jednym lub dwóch wierszach. – Chiel