获取用于 for 循环的数组大小

Get array size for use in for loop

我正在尝试获取我的 tiles 数组的大小,以便它可以在下面的 for 循环中使用。然而,在编译时,它表明 .size() 在 C++ 2011 中是实验性的。获得与检查每个图块的 'E' 字符的循环相关的大小的最佳方法是什么?我使用的是数组而不是向量,所以请帮助我处理数组。

void Floor::placePlayer()
{
    bool foundEntry = false;
    int entryX;
    int entryY;

    for (int x = 0; x < tiles.size() && !foundEntry; x++)
    {
        for (int y = 0; y < tiles[x].size() && !foundEntry; y++)
        {
            if (tiles[x][y] == 'E')
            {
                player.set_position (x,y);
                tiles[x][y] = 'P';
            }
        }
    }
}

这也是我来自 header 的数组:

const static int ROWS = 20;
const static int COLS = 30;
char tiles[ROWS][COLS];

感谢您的帮助!

你为什么不使用你用来创建数组的const static int

void Floor::placePlayer()
{
    bool foundEntry = false;
    int entryX;
    int entryY;

    for (int x = 0; x < ROWS && !foundEntry; x++)
    {
        for (int y = 0; y < COLS && !foundEntry; y++)
        {
            if (tiles[x][y] == 'E')
            {
                player.set_position (x,y);
                tiles[x][y] = 'P';
            }
        }
    }
}

你可以使用

for (int x = 0; x < sizeof(tiles)/sizeof(char*) && !foundEntry; x++)

for (int y = 0; y < sizeof(tiles[x])/sizeof(char) && !foundEntry; y++)

在 C++ 中,您可以使用以下函数来计算 C 风格数组中元素的数量:

template<typename T, size_t N>
size_t lengthof( T (&arr)[N] )  { return N; }

那么循环将是:

for (size_t x = 0; x < lengthof(tiles) && !foundEntry; x++)

    for (size_t y = 0; y < lengthof(tiles[x]) && !foundEntry; y++)

这比对值进行硬编码更安全,因为那样的话,如果您稍后更改数组的大小,您的循环将开始静默访问错误数量的元素。