我有一个非常简单的问题,但我看不到解决方案。
首先,我有一个名为Seed的结构,其代码如下:
struct Seed
{
int x, y;
int i, j;
int Type;
};
然后我分别创建一个2D数组和一个队列,如下所示:
Seed Grid[ROW][COL];
std::queue<Seed> SeedsToUpdate;
我用循环填充网格:
void CApp::LoopSeeds(int function, int Type)
{
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < COL;j++)
{
switch (function)
{
case SET:
SetSeed(i, j, Type);
break;
case DRAW:
DrawSeed(i,j);
break;
case GROW:
GrowSeed(i,j,Type);
}
}
}
}
然后,我将数组中的单个种子设置为其他类型,例如GREEN
。然后我通过遍历数组填充队列,并用所有具有GREEN
类型的数组元素填充它:
void CApp::BuildQueue()
{
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < COL;j++)
{
if (Grid[i][j].Type != SEED_EMPTY)
{
SeedsToUpdate.push(Grid[i][j]);
}
}
}
}
此时,一切都很好(我认为)。但是,我想要做的是:对于队列中的每个种子,编辑数组中的相邻单元格,如Grid[i+1][j].Type = GREEN;
这是我的问题:考虑到上面的代码,我该怎么做?
感谢您的耐心等待。
答案 0 :(得分:0)
在C ++ 11中
for(const Seed& seed: SeedsToUpdate){
if (seed.i + 1 < ROW){
Grid[seed.i+1][seed.j].type = seed.type
}
}
C ++ 03 with Boost
BOOST_FOREACH(const Seed& seed, SeedsToUpdate){
if (seed.i + 1 < ROW){
Grid[seed.i+1][seed.j].type = seed.type
}
}
在C ++ 03中(没有Boost)
for(std::queue<Seed>::const_iter it = SeedsToUpdate.begin(); it != SeedsToUpdate.end(); ++it) {
const Seed& seed = *it;
if (seed.i + 1 < ROW){
Grid[seed.i+1][seed.j].type = seed.type
}
}
此外,您应该使用std :: array / boost :: array而不是原始数组。
答案 1 :(得分:0)
if (i+1 < ROW) {
Grid[i+1][j].Type = GREEN;
SeedsToUpdate.push(Grid[i+1][j]);
}