1

「部屋」オブジェクトの2次元配列を、配列の内容の一種の印刷/表示として返そうとしています。

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>です。

#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>または「フラット」N*M配列、およびいくつかの慎重なインデックスの操作)。

編集 2 : 設定できるものもできないものも保存する必要がある場合は、 rawstd::unique_ptr<Room>の単純な古い s の代わりに配列またはベクトルを使用できます。もう 1 つのオプションは、単純に 2D マップを使用することです。RoomRoom*std::map<int, std::map<int, Room>>

于 2013-03-01T18:46:42.233 に答える
0

std::vector< Room >最も簡単な方法は、配列にa を使用することです。そうすれば、メモリ管理について心配する必要がなくなり、サイズが配列に組み込まれます。

于 2013-03-01T18:47:12.667 に答える