我正在尝试在向量中获取特定元素。 例如,
假设我有一个载体。
std::vector<Tile> TileList;
Vector的大小为MAP_HEIGHT = 30,MAP_WIDTH = 200 所以它的总大小是MAP_HEIGHT * MAP_WIDTH = 6000。 我使用双嵌套for循环来迭代并创建一个满是tile的向量。
for(int Y = 0; Y < MAP_HEIGHT; Y++)
{
for(int X = 0; X < MAP_WIDTH; X++)
{
Tile TempTile;
fscanf(FileHandle, "%d:%d ", &TempTile.TileID, &TempTile.TypeID);
TileList.push_back(TempTile);
}
}
现在我的问题可以说是我遍历
int ID = 0;
for(int Y = 0; Y < MAP_HEIGHT; Y++)
{
for(int X = 0; X < MAP_WIDTH; X++)
{
TileList[ID].do stuff with it
//Check for the tile above this tile
// Find a way to calculate the ID of the tile above this tile
int IDoftilabove = ID - do something;
if(TileList[IDoftilabove].variable == TILE_SOMETHING)
{
do stuff
}
ID++;
}
如何根据我当前的元素计算向量内部元素的ID(技术上在此ID之前)。
插图: 说我有一个矩阵5x5, 让我说我目前的ID是8.所以我在第二行3号。
1 2 *3* 4 5
1 2 (3) 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
现在我想要向量中直接位于我上面的元素的ID,即ID 3,第一行第3行。这只是假设MAP_WIDTH = 5且MAP_HEIGHT = 5。
答案 0 :(得分:2)
8 - 5 = 3
当前 - MAP_WIDTH
=高于
答案 1 :(得分:0)
您可以轻松确定(row,col)
的<{1}}坐标:
ID
如果你想知道上面元素的坐标是什么:
row = ID / MAP_WIDTH;
col = ID % MAP_WIDTH;
如果你想知道下面的元素是什么,同样适用:
row--;
ID_above = row * MAP_WIDTH + col;
答案 2 :(得分:0)
您似乎想要在线性和二维索引之间进行映射。这非常简单。
int rect2lin(int w, int x, int y) { return y*w+x; }
void lin2rect(int w, int i, int * x, int * y) { *y = i/w; *x = i%w; }
因此在您的示例中,上面(X,Y)元素的ID将是rect2lin(MAP_WIDTH,X,Y-1),它只是(Y-1)* MAP_WIDTH + X.这直接推广到更高维数。例如,i =(z * h + y)* w + x表示3d,依此类推。