2009-09-13 5 views

Répondre

3

Ce n'est pas C++, c'est C. Vous pouvez le faire:

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

Si vous utilisez C++, il ressemblerait à ceci:

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

ou ce (ce qui évite l'allocation la mémoire et la dépendance des paramètres de taille):

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

et d'ailleurs en C++, vous pouvez utiliser une file d'attente au lieu d'un vecteur, WHIC h est ce que tu sembles vouloir. En C++, cependant, un conteneur multidimensionnel (vector ou deque) est effectivement un tableau de pointeurs vers des tableaux, c'est-à-dire une structure de mémoire discontigue, contrairement à un tableau de tableaux de type C qui réside dans un seul bloc de mémoire.

+0

Neat morceau de code C :) –

1

Les tableaux sont des constructions statiques de taille fixe. Pour obtenir le type de chose que vous cherchez (stockage contigu indexable avec insertion et suppression), vous devriez vérifier le type de conteneur de vecteur STL.

+0

Est-il possible de décaler le tableau entier? – jmasterx

+0

STL vecteur ne serait pas optimal pour cela, il veut probablement une file d'attente/deque. – Potatoswatter

+1

Deque est uniquement contiguë par morceaux, donc ne sera pas un bon match pour quelque chose qui s'attend à gérer des tableaux. –