gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:36:45 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com