我正在尝试将“房间”对象的二维数组作为一种打印/显示数组中的内容。
Room* m_map[10][10];
生成如下:
//Initialise array to NULL
for(int x=0;x<10;x++)
{
for(int y=0;y<10;y++)
m_map[x][y] = NULL;
}
for(int n=0; n<10; n++)
{
for(int ran=0; ran<3; ran++)
{
int r_n = rand() % 10 ;
Room* r = new Room(n, "Normal", true, false, false, true);
m_map[r_n][n] = r;
}
}
所以这给出了数组中Rooms的分散。
然后我想为这些房间的用户显示/打印,参考NULL。
所以我可以举例来说,如果NULL显示'#',如果它是一个房间留下''。
我不确定我应该在方法中返回的位。
真的很感激任何帮助或指向正确的方向
答案 0 :(得分:7)
如果数组是固定大小(并且在编译时已知大小),则使用std::array<Room, N>
会更容易;如果不是,则使用std::vector<Room>
。
#include <array> // or <tr1/array> if no C++11
std::array<Room, TheSize> returnArray() const
{
return m_map;
}
但请注意,根据用例,可能想要返回引用,而不是副本:
const std::array<Room, TheSize>& returnArray() const
{
return m_map;
}
也就是说,如果您只想打印一些对象,那么就不要暴露实现细节,例如数组。您可以提供打印功能,更好的是,覆盖您的类型std::ostream& operator<<
。
// inside your class declaration:
friend
std::ostream& operator<<(std::ostream& o, const MyClassWithRooms& r)
{
// loop over r.m_map and print to o
}
编辑如果数组是2D(如注释中所述),则有以下选项:嵌套数组结构(std::array<std::array<T,N>,M>
或&#34; flat&#34; {{ 1}}数组,并仔细阅读索引)。
编辑2 :如果您需要存储可以设置或不设置的内容,您可以使用N*M
的数组或向量,而不是普通的std::unique_ptr<Room>
原始Room
。另一种选择是使用2D地图Room*
。
答案 1 :(得分:0)
最简单的方法是为您的阵列使用std::vector< Room >
。这样您就不必担心内存管理,并且大小已内置到阵列中。