Ho una matrice numero intero che dovrebbe agire come un buffer:C: modo intelligente per "spostare" una matrice?
x = {{0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}};
Ora, se aggiungo una nuova riga {3, 3, 3, 3, 3}
, la nuova matrice dovrebbe essere simile:
x = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}};
C'è un modo intelligente per farlo senza copiare tutti gli elementi in giro?
Più risposte di seguito sono tecnicamente corrette, ma implicano tutte compromessi diversi. Puoi espandere un po 'il tuo uso previsto? Quanto saranno grandi queste matrici? Quanto spesso ti aspetti di aggiungere una riga, rispetto al numero di volte in cui accederai ai dati dalle matrici? Accederai ai singoli elementi della matrice, o verrà letto solo come un'entità intera dall'inizio alla fine? Vuoi essere in grado di liberare parti della matrice di volta in volta? Se è così, solo dalla fine, o dall'inizio, o da una riga arbitraria? –
La matrice non è grande (come 100 elementi in totale).Avrò sempre accesso all'intera matrice, la "vecchia" riga può andare via (comportamento della coda in coda), gli aggiornamenti si verificano molto spesso. –
In tal caso, l'approccio modulo proposto da @ruslik è probabilmente la soluzione migliore. Basta allocare un array in grado di gestire la dimensione massima, mantenere un puntatore alla testata corrente e avvolgere la fine dell'array quando si esaurisce la stanza. –