2012-05-08 5 views
0

2D配列:割り当てCell **scoreTable .After:C++の2Dオブジェクト配列ですか?など

scoreTable = new Ceil*[10]; 
for(int i = 0 ;i<10;i++) 
scoreTable[i] = new Ceil[9]; 

そして、私はこのような値を保存したい:。scoreTable[i][j]= new Ceil(i,j)ヒープで、これは助けのためにC++でのおかげで作業することはできません。

+1

入れ子の 'std :: vector >'を使用することを検討しましたか? – moooeeeep

+0

read http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.16 –

答えて

0

あなたはこのようなあなたの配列を割り当てられたら、あなたはすでに持っていますCellの2D配列なので、newキーワードを使用して値を変更する必要はありません。

あなたCellクラスにSetValue(i,j)のような方法を与える場合は、このようにそれを使用することができます:scoreTable[i][j].SetValue(i,j);

+0

私はあまりにも多くのことを考えました、ありがとう、ちょうど新しい方法を追加して、それは良いです。 – sinjon87

1

scoreTable[i][j]= new Ceil(i,j)Cell*をCellに入力しようとしています。

あなたはポインタの2次元配列を作成する必要があります。

auto scoreTable = new Ceil**[10]; 
for(int i = 0 ;i<10;i++) 
    scoreTable[i] = new Ceil*[9]; 

をしかし、もっと良いvectorを使用することです:

std::vector< std::vector<Ceil*> > table; 
table.resize(10); 
for (int i = 0; i < 10; ++i) 
{ 
    table[i].resize(9, NULL); 
} 
table[3][4] = new Ceil(); 
+0

私はこれを知っていますが、JavaをC++に変換するとこの質問が表示されるため、多くの変更が必要です、scoreTableはクラスメンバです。すべて同じです。 – sinjon87

+0

'vector'は' operator' [] 'をオーバーロードするので、それほど多くの変更は起こらず、配列のように動作します。 – MSalters

0

は、私が代わりにstd::vectorを使用することをお勧めします。それは追跡するのがずっと簡単です。

あなたは、これはvector<Cell>の10の元素、9個の細胞を含む各を含むベクターであるscoreTableを作成する

std::vector< std::vector< Cell> > scoreTable(10, std::vector<Cell>(9)); 

して上記すべてのコードを置き換えることができます。換言すれば、所望の2Dテーブル。

同じように要素にアクセスします。私は9にフロン0移行し、

あなたは新しい行に拡張したい場合は0から8のJ scoreTable[i][j]は、ちょうど言う:新しい列の

scoreTable.push_bach(std::vector<Cell>(9)); 

for(size_t row = 0; row < scoreTable.size(); ++row) { 
    scoreTable[row].push_back(Cell()); 
} 

newまたはdeleteの必要はありません。

+0

はい、試してみると良い方法です。ありがとうございます。 – sinjon87