使用X,Y,Z索引到std :: vector

时间:2012-07-13 17:18:46

标签: c++ stdvector

我有一个std::vector<Chunk*> m_vpChunks对象,它包含一个块的向量。 我也有一个世界和X,Y,Z坐标。

我用:

创建块
// Go through all chunks
    for(int x = 0; x < m_iSize; x+=CHUNK_SIZE_X)
    {
        for(int y = 0; y < m_iSize; y+=CHUNK_SIZE_Y)
        {
            for(int z = 0; z < m_iSize; z+=CHUNK_SIZE_Z)
            {


                // Create new chunk
                CChunk  *pChunk =   NULL;
                pChunk          =   new CChunk(CVector3(x,y,z));
                assert(pChunk);       


                // Add it to our list
                m_vpChunks.push_back(pChunk);

            }
        }
    }

想要使用X,Y,Z索引到一个块矢量,如:

CChunk *GetChunk(int X, int Y, int Z)
{

 return m_vpChunks[ *** ];

}

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

认为是:

return m_vpChunks[
  x/CHUNK_SIZE_X * (m_iSize/CHUNK_SIZE_Y * m_iSize/CHUNK_SIZE_Z) +
  y/CHUNK_SIZE_Y * (m_iSize/CHUNK_SIZE_Z) +
  z/CHUNK_SIZE_Z ];

<小时/> 但严重的是,使用不同的数据结构。我想到嵌套的向量,在这种情况下你会返回:

return m_vpChunks[x][y][z];

或者

return m_vpChunks[x/CHUNK_SIZE_X][y/CHUNK_SIZE_Y][z/CHUNK_SIZE_Z];