C++ 将对象存储在c+中的二维sprite矩阵中+;
我想在二维向量中存储一个tile列表(指向“Sprite”类对象的指针) 目前,我正在将tilemap中的所有精灵存储在一个向量中C++ 将对象存储在c+中的二维sprite矩阵中+;,c++,matrix,vector,C++,Matrix,Vector,我想在二维向量中存储一个tile列表(指向“Sprite”类对象的指针) 目前,我正在将tilemap中的所有精灵存储在一个向量中 std::vector<Sprite*> _tiles; std::vector\u tiles; 现在我需要得到所有相邻的瓷砖,我认为这更容易,将我的精灵存储在2d矩阵中(向量中的向量)来进行这些计算 但我不知道该怎么做 标题: private: std::vector<std::vector<Sprite*>> mat
std::vector<Sprite*> _tiles;
std::vector\u tiles;
现在我需要得到所有相邻的瓷砖,我认为这更容易,将我的精灵存储在2d矩阵中(向量中的向量)来进行这些计算
但我不知道该怎么做
标题:
private:
std::vector<std::vector<Sprite*>> matrix;
private:
向量矩阵;
C++文件:
vectorMatrix::vectorMatrix(int columns, int rows) { }
vectorMatrix::~vectorMatrix() { }
void vectorMatrix::addCellAt(int x, int y, Sprite* sprite) {
std::vector< std::vector<Sprite*> > matrix;
matrix[x][y].push_back(sprite);
}
vectorMatrix::vectorMatrix(int列,int行){
向量矩阵::~vectorMatrix(){}
无效向量矩阵::addCellAt(整数x,整数y,精灵*精灵){
标准向量<标准向量>矩阵;
矩阵[x][y]。推回(精灵);
}
但如果使用两个索引运算符,则会收到错误消息。三个问题:
matrix
,该变量会隐藏成员变量x
和y
索引,则将超出范围矩阵[x][y]
本身不是一个向量,它是一个可以直接指定的元素:
matrix[x][y] = sprite;
记住在做这个之前要考虑问题2。matrix
,该变量会隐藏成员变量x
和y
索引,则将超出范围矩阵[x][y]
本身不是一个向量,它是一个可以直接指定的元素:
matrix[x][y] = sprite;
记住在做这个之前要考虑问题2。为什么你认为把你的矩阵变成向量的向量是个好主意?诚然,这将“起作用”,因为向量矩阵[i][j]的
vec\u将返回正确的东西,但这有点麻烦和低效
而是把你的类放在一个向量的基础上,所有的数据都是这样做的。元素访问将类似于(对于列主数据):
您甚至可以使用行代理类安排map[x][y]
工作。为什么您认为将矩阵作为向量向量是个好主意?诚然,这将“起作用”,因为向量矩阵[i][j]
的vec\u将返回正确的东西,但这有点麻烦和低效
std::vector< std::vector<Sprite*> > matrix;
而是把你的类放在一个向量的基础上,所有的数据都是这样做的。元素访问将类似于(对于列主数据):
您甚至可以使用行代理类安排map[x][y]
工作
std::vector< std::vector<Sprite*> > matrix;
然后您可以将xth和yth元素设置为相应的Sprite*
,当然x
和y
应该小于行
和列
matrix[x][y] = sprite;
不要在addCellAt
中再次声明matrix
,您可以直接在类中的任何位置使用数据成员
然后您可以将xth和yth元素设置为相应的Sprite*
,当然x
和y
应该小于行
和列
matrix[x][y] = sprite;
不要在addCellAt
中再次声明matrix
,您可以直接在类中的任何位置使用数据成员。matrix[x][y]
为您提供了一个Sprite*
。您可能应该改为使用=
为其分配空间,并切换到使用std::shared_ptr
以避免内存泄漏而无法释放数据。您尚未为矩阵matrix[x][y]
分配空间,因为它为您提供了一个Sprite*
。您可能应该改为使用=
为其分配,并切换到使用std::shared_ptr
以避免内存泄漏而无法释放数据。您没有为矩阵分配空间本地矩阵是一个复制粘贴错误。。。sry-感谢您的澄清!本地矩阵是一个复制粘贴错误。。。sry-感谢您的澄清!非常感谢。我在很多例子中发现了这种方法,这就是为什么我想使用它。我不认为这太麻烦,但如果有一个更有效的方法,我会看看。绩效差异是否显著?我想我会在每个TrimeMatrx上调用几个操作,这样就可以很好地考虑。@克里斯:它很可能会更好地执行,因为元素访问不需要双重间接,也就是说,只有一个内存负载,而乘法+Add很好地被CPU所接受。谢谢!我在很多例子中发现了这种方法,这就是为什么我想使用它。我不认为这太麻烦,但如果有一个更有效的方法,我会看看。绩效差异是否显著?我想我会在每个TrimeMatrx上调用几个操作,这样就可以很好地考虑。@克里斯:它很可能会更好地执行,因为元素访问不需要双重间接,也就是说,只有一个内存负载,而乘法+Add很好地被CPU所满足。