0

我有一个可能非常简单的问题,但我看不到解决方案。

首先,我有一个名为 Seed 的结构,代码如下:

struct Seed
{
    int x, y;
    int i, j;
    int Type;
};

然后我分别创建一个二维数组和一个队列,如下所示:

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;

这是我的问题:给定上面的代码,我该怎么做?

谢谢你的耐心。

4

2 回答 2

0

它实际上非常简单。在你的内部循环中,做一些事情

if (i+1 < ROW) {
   Grid[i+1][j].Type = GREEN;
   SeedsToUpdate.push(Grid[i+1][j]);

}
于 2012-07-30T10:52:44.087 回答
0

在 C++11 中

for(const Seed& seed: SeedsToUpdate){
    if (seed.i + 1 < ROW){
        Grid[seed.i+1][seed.j].type = seed.type
    }
}

C++03 与 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 而不是原始数组。

于 2012-07-30T10:51:50.950 回答