stavo cercando di copiare una matrice bidimensionale in un'altra matrice con un'altra dimensione. Ad esempio: primo array con 4 righe e 4 colonne:Copia elementi di array bidimensionali in un'altra matrice bidimensionale con un'altra dimensione
1 2 3 4
5 6 7 8
9 0 1 2
3 4 5 6
secondo array con 2 righe e 8 colonne:
1 2 3 4 5 6 7 8
9 0 1 2 3 4 5 6
e se ci sono nel nuovo array più elementi di primo quindi la funzione lo riempirà con 0
questa è la funzione che ho fatto, ma il problema con gli indici. Come si scrive nel modo giusto?
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
}
}
loop solo sul primo array utilizzando i e j. Gli indici z e k per il secondo array devono essere valutati da i e j, non eseguire il loop su z e k. –
Poiché una matrice è contigua nella memoria, gli array sono quasi gli stessi nel modo in cui sono memorizzati. La domanda è, quale livello di controllo hai bisogno nella tua funzione. Cosa vuoi a condizione che la destinazione sia più piccola della fonte? E come già accennato in seguito, ha bisogno di essere eseguito solo per gli array o anche per una serie di puntatori? Perché se i dati sono contigui in memoria puoi farlo in una o due righe. – Chiel