我试图返回一个二维的'房间'对象数组作为一种打印/显示数组中的内容.
Room* m_map[10][10];
Run Code Online (Sandbox Code Playgroud)
如此生成:
//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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以这给出了阵列中Rooms的分散.
然后,我想为这些房间所在的用户显示/打印,参考NULL.
所以我可以举例来说,如果NULL显示'#',如果它是一个房间留下''.
我不确定我应该在方法中返回的位.
任何帮助或指向正确的方向将真的很感激
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;
}
Run Code Online (Sandbox Code Playgroud)
但要小心,根据用例,您可能希望返回引用,而不是副本:
const std::array<Room, TheSize>& returnArray() const
{
return m_map;
}
Run Code Online (Sandbox Code Playgroud)
也就是说,如果您只想打印一些对象,那么不要暴露实现细节,例如数组.您可以提供打印功能,更好的是,覆盖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
}
Run Code Online (Sandbox Code Playgroud)
编辑如果数组是2D(如注释中所述),则有选项:嵌套数组结构(std::array<std::array<T,N>,M>或"平面" N*M数组,以及一些小心地使用索引).
编辑2:如果你需要存储可以设置或不设置的东西,你可以使用数组或向量std::unique_ptr<Room>而不是普通Room的原始数据Room*.另一个选择就是使用2D地图,a std::map<int, std::map<int, Room>>.