Domanda

Ho una griglia di array 2d creata come int GRID [10] [20]; Quello che voglio fare è rimuovere l'ultima riga GRID [LAST] [ALL] e inserire una riga vuota all'inizio dell'array. Ho provato a cercarlo su Google senza fortuna. Grazie

È stato utile?

Soluzione

Questo NON è C ++, questo è C. Puoi farlo:

memmove( GRID[1], GRID, sizeof GRID - sizeof GRID[0] ); // shift the array
bzero( GRID, sizeof GRID[0] ); // zero out the first row

Se si utilizza C ++, sarebbe simile al seguente:

GRID.pop_back(); // remove the last row
GRID.push_front( std::vector< int >( 10 ) ); // add an initial row

o questo (che evita di allocare memoria e dipendenza dai parametri di dimensione):

rotate( GRID.begin(), GRID.end()-1, GRID.end() ); // shift the array
fill( GRID[0].begin(), GRID[0].end(), 0 ); // zero out the first row

E inoltre in C ++ puoi usare una coda invece di un vettore, che è ciò che sembri volere. In C ++, tuttavia, un contenitore multidimensionale ( vector o deque ) è effettivamente un array di puntatori ad array, ovvero una struttura di memoria non contigua, a differenza di un array in stile C di array che risiede in un singolo blocco di memoria.

Altri suggerimenti

Le matrici sono costrutti statici con dimensioni fisse. Per ottenere il tipo di cosa che stai cercando (archiviazione contigua indicizzabile con inserimento ed eliminazione), dovresti controllare il tipo di contenitore vettoriale STL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top