Это НЕ C ++, это C. Вы можете сделать это:
memmove( GRID[1], GRID, sizeof GRID - sizeof GRID[0] ); // shift the array
bzero( GRID, sizeof GRID[0] ); // zero out the first row
Если бы вы использовали C ++, это выглядело бы так:
GRID.pop_back(); // remove the last row
GRID.push_front( std::vector< int >( 10 ) ); // add an initial row
или это (что позволяет избежать выделения памяти и зависимости от параметров размера):
rotate( GRID.begin(), GRID.end()-1, GRID.end() ); // shift the array
fill( GRID[0].begin(), GRID[0].end(), 0 ); // zero out the first row
Более того, в C ++ вы можете использовать очередь вместо вектора, что вам и нужно. В C ++, однако, многомерный контейнер (vector
или deque
) фактически является массивом указателей на массивы, то есть непрерывной структурой памяти, в отличие от массива массивов в стиле C, который находится в одном блоке памяти.