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

时间:2015-03-03 00:22:55

标签: c++ arrays maze

我试图获取tile数组的大小,以便可以在下面的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';
            }
        }
    }
}

这也是标题中我的数组:

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

在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++)

这比硬编码值更安全,因为这样,如果你以后改变了数组的大小,你的循环就会开始静默地访问错误数量的元素。

答案 1 :(得分:2)

为什么不使用用于创建数组的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';
            }
        }
    }
}

答案 2 :(得分:0)

您可以使用

  

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

  

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