1

我试图返回一个二维的“房间”对象数组,作为数组中内容的一种打印/显示。

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显示'#',如果它是一个房间离开一个''。

我不确定我应该在方法中返回的位。

任何帮助或指出正确的方向将不胜感激

4

2 回答 2

7

std::array<Room, N>如果数组是固定大小(并且大小在编译时已知),或者std::vector<Room>如果不是,则使用 a 会更容易。

#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>代替Roomraw 的普通旧 s Room*。另一种选择是简单地使用 2D 地图,一个std::map<int, std::map<int, Room>>.

于 2013-03-01T18:46:42.233 回答
0

最简单的方法是std::vector< Room >为您的数组使用 a 。这样您就不必担心内存管理,并且大小内置在数组中。

于 2013-03-01T18:47:12.667 回答