Насколько я понимаю из вашего вопроса, и я уверен, что не понимаю его полностью, я думаю, что вы хотите, чтобы имитировать некоторые виды клеток, растущих в двумерной сетке.
Предполагая, Ваша ячейка - это некий объект. Сохраните ваши ячейки непосредственно в двумерном массиве и получите список, в котором хранятся индексы важных ячеек.
В качестве реализации, давайте: -
class Cell{
... //data members
bool enabled; //Just for representing empty/available spaces in 2-D grid. If it is set to true, then there is a cell in the specific unit of the grid.
Cell(){
enabled = false;
}
... //other cell data
}
будет вашим классом, который используется для создания отдельных объектов ячеек; тогда: -
std::vector<std::vector<Cell>> grid(m, vector<Cell>(n));
будет представлять вашу двумерную сетку размером m * n.
Теперь, благодаря конструктору по умолчанию, все ячейки внутри grid
будут иметь enabled = false
. Это хорошо, потому что он может работать как пустые места для роста ваших клеток.
Далее, есть список, в котором хранятся индексы ваших «важных» ячеек: -
struct Index{
int x, y;
Index(int x_, int y_){
x = x_;
y = y_;
}
}
std::list<Index> importantCells;
Примечание : Я использую список здесь, потому что я предполагаю, что вам не нужен произвольный доступ.
Изначально поместил несколько 'важных' ячеек в вашу сетку, например, в (0, 0) вашей сетки: -
grid[0][0] = Cell(...) //Assuming you have some parameterized constructor for that...
, а теперь сохраните индекс 0,0
в вашем списке importantCells
: -
importantCells.emplace_back(0, 0); //or use push_back() if you wish
Теперь просмотрите список importantCells
, прочитайте позиции «важных» ячеек и обновите их в своем 2-D grid
. Это приведет к генерации новых «важных» ячеек и, возможно, к удалению текущей «важной» ячейки (потому что у нее может не хватить места для роста). Для вновь сгенерированных ячеек добавьте их в список, используя emplace_front
, и, если текущая ячейка становится неважной, удалите ее из списка ...
Вы также можете использовать вектор, если вам нужен произвольный доступ, но списки кажутся лучше для вашего сценария.