C ++从类方法返回一个对象数组

时间:2013-03-01 18:45:23

标签: c++ arrays oop

我正在尝试将“房间”对象的二维数组作为一种打印/显示数组中的内容。

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

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

真的很感激任何帮助或指向正确的方向

2 个答案:

答案 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 >。这样您就不必担心内存管理,并且大小已内置到阵列中。