如何在二维数组中引用对象
How to reference objects in a 2 dimensional array?
我读到你可以在这一行声明一个对象数组
Enemy * d = new Enemy[2];
,但当我试图做一个二维数组,有一个错误,这不能初始化。我也试过这个
Enemy *enemies[6][2];
但是我不确定如何引用该数组中的每个对象以及如何将该引用传递给函数。
为了创建锯齿数组,需要使用指针指向指针。
Enemy** d = new Enemy*[6];
for (size_t i = 0; i < 6; ++i)
d[i] = new Enemy[2];
如果你打算创建一个固定大小的数组,你可以像创建一个普通数组一样创建它。
Enemy enemies[6][2];
然后使用两个索引引用它们。
enemies[2][1].roar();
注意:您会发现多维数组往往会带来比它们的价值更多的麻烦。维护一个单维数组并根据行数和列数对其进行索引要简洁得多。
Enemy* enemies = new Enemy[rows * cols];
Enemy* getEnemy(size_t row, size_t col)
{
return enemies + (row * cols + col);
}
如果你真的想在堆上分配一个2D数组,你可以这样做:
Enemy (*enemies)[2] = new Enemy[6][2];
但是如果没有间接的话就简单多了:
Enemy enemies[6][2];
对于c++,你应该使用std::vector而不是C数组。
std::vector<std::vector<Enemy> > d(6);
for (size_t i = 0; i < 6; ++i)
d[i].resize(2);
//now d is ready to use
d[1][2];
你会做
Enemy (*enemies)[2] = new Enemy[6][2];
也就是指向2个敌人数组的指针。请注意,只有第一个数组级别可以作为指针,因此在运行时确定。
还要注意,你的第二个定义创建了一个6*2个指向敌人指针的数组。假设你已经初始化了所有的指针,你可以访问它们作为*enemies[j][k]
,或者如果每个指针本身指向一个数组,作为enemies[j][k][l]
。
请注意,如果您希望在运行时确定两个索引,则应该分配一个大数组并使用索引算法:
敌人*敌人=新敌人[6*2];//访问元素(j,k)敌人(6 * j + k) .fight ();
当然,通常最好使用vector<Enemy>
,除非你的类Enemy
不适合向量,例如,因为它不能被复制(参见第3章)。在c++ 11中,已移动)。此外,当以这种方式处理多维数组时,理想情况下应该将数组和索引逻辑封装在一个类中。
相关文章:
- 引用对象成员函数的成员函数
- 从 Base 引用对象调用派生类的成员
- 转换引用对象的边界框?
- 现代编译器会优化只引用对象子集的局部变量吗
- l值引用对象上的Constexpr成员函数:Clang和gcc不同意
- 将 const 类型引用对象注册为类成员对象C++
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- 无法用2D矢量成员引用对象
- 在由引用对象传递中访问由引用对象传递的变量
- 如何使用QString引用对象名称
- 使用自动迭代器引用对象
- C++ 在另一个对象中引用对象的当前状态
- 使用共享对象和引用对象进行引用计数
- 未显式引用对象的全局对象构造函数在最终二进制文件 - LD 中被丢弃
- 引用对象的动态类型何时可以更改
- 引用对象内部的指针
- C++从全局静态函数中引用对象
- C++如何仅在没有其他人直接或间接引用对象指针时删除该指针
- 如何使用C++引用对象
- 为什么引用对象仅保存特定类型的引用