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

C++ returning an array of objects from a class method

本文关键字:一个对象 数组 返回 类方法 c++      更新时间:2023-10-16

我试图返回'room'对象的二维数组,作为数组中内容的一种打印/显示。

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
}

Edit如果数组是2D的(如注释中提到的),那么有选项:嵌套数组结构(std::array<std::array<T,N>,M>,或"平面"N*M数组,以及一些小心地玩索引)。

Edit 2:如果您需要存储可以设置或不设置的东西,您可以使用std::unique_ptr<Room>的数组或向量,而不是原始Room*的普通旧Room s。另一种选择是使用2D地图,即std::map<int, std::map<int, Room>>

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