从队列中访问属于数组的元素(C ++)

时间:2012-07-30 10:22:12

标签: c++ arrays queue

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

首先,我有一个名为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;

这是我的问题:考虑到上面的代码,我该怎么做?

感谢您的耐心等待。

2 个答案:

答案 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]);

}