我试图获取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];
感谢您的帮助!
答案 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 ++)