Вставить и удалить строки из массива int в C ++? - PullRequest
0 голосов
/ 13 сентября 2009

У меня есть двумерная сетка, сделанная как int GRID [10] [20]; Что я хочу сделать, это удалить последнюю строку GRID [LAST] [ALL] и вставить пустую строку в начале массива. Я попытался Google это без удачи. Спасибо

Ответы [ 2 ]

3 голосов
/ 13 сентября 2009

Это НЕ 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, который находится в одном блоке памяти.

1 голос
/ 13 сентября 2009

Массивы - это статические конструкции с фиксированным размером. Чтобы получить то, что вы ищете (индексируемое смежное хранилище со вставкой и удалением), вы должны проверить тип контейнера векторов STL.

...