1

ベクトルやintなどのスタックを作成する方法を知っています。しかし、多次元配列t[n][n]のスタックを作成する方法がわかりません。それを実装する方法は何ですか?これは私の実際の実装であり、機能していません。

char map[20][20];
stack<map> soluciones;

編集:

私の英語のせいで、ほとんどの人は私の質問を理解していなかったと思います。ある種のゲームマップを入手したと想像してみてください。各多次元配列をスタックに保存しています。それが私の目的であり、マップをスタックに保存します

編集2:Visual Studio2010Windowsフォームアプリケーションを使用するim

4

4 に答える 4

3

コード例では、 (テンプレートのインスタンス化で)map型名が必要な場所の代わりに(変数の名前)を使用します。stack<map>ただし、適切な型名を使用していても機能しません(この場合、typedefを使用する必要があります。たとえばtypedef char TwoDimCharArray[20][20]、次のようにしてみてstd::stack<TwoDimCharArray>ください。

配列にデフォルトのコンストラクターがないという問題がまだあります(これstd::stackは期待しています)。したがって、std::stack配列を直接含めることはできません。配列をクラスまたは構造体(デフォルトのコンストラクターを持つことができます)内にラップする必要があります。例:

class TwoDimCharArray
{
public:
    // omit if there's nothing to initialize in map, then the
    // compiler-generated constructor will be used
    TwoDimCharArray()
    {
        // ... initalize map values
    }
    // ... provide access methods to map
private:
    char map[20][20];
};

std::stack<TwoDimCharArray> soluciones;

またはBoost.Array、C ++ 11std::arrayのものを使用してください!これらが利用可能である場合、それらは間違いなくより良く、より簡単な選択です!

于 2012-09-21T08:36:26.617 に答える
3

ゲームマップに適切なクラスを定義する必要があると思います。そうすれば、ゲームマップのスタックは問題になりません。

class GameMap {
public:
...
private:
  char map_[1000][1000];
};

次に、マップデータをどのように割り当てて管理するかはスタックにとって重要ではありません。例えば

typedef std::stack<GameMap> GameMapStack;
于 2012-09-21T08:42:09.253 に答える
2

次のような多次元配列のラッパークラスを定義します。

template <class T, int X, int Y>
class Wrapper
{
public:
    T array[X][Y];
}

次に、stack<Wrapper<char, 20, 20> >

于 2012-09-21T08:44:45.637 に答える
1

最初に構造を作成してから、空の多次元char配列を定義します。次に、構造体を閉じ、tharの後にプッシュおよびポップ操作を書き込みます。

于 2012-09-21T08:46:33.507 に答える