我正在尝试返回一个“房间”对象的二维数组,作为数组中内容的一种打印/显示。
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;
}
}
所以这给出了数组中房间的分散。
然后我想为用户显示/打印这些房间的位置,引用 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;
}
不过要小心,根据用例,您可能想要返回一个引用,而不是一个拷贝:
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
}
编辑 如果数组是二维的(如评论中所述),则有以下选项:嵌套数组结构( std::array<std::array<T,N>,M>
,或“平面” N*M
数组,以及一些小心玩有索引)。
编辑 2:如果您需要存储可设置或不可设置的内容,您可以使用 std::unique_ptr<Room>
的数组或 vector 而不是普通的旧 Room
原料的 s Room*
.另一种选择是简单地使用二维 map ,std::map<int, std::map<int, Room>>
.
关于C++ 从类方法返回对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164706/