実行時に動的に配列を割り当てるというアイデアを抱いて、私は現時点で苦労しています。 Javaからは、クラススケルトンの配列を宣言するだけで、実装のサイズだけが必要でした。クラス内にオブジェクトポインタの2D配列を動的に割り当てる
これは私が動的に2次元配列を割り当てるために見つけたものです:
Grid.h
Block** grid;
Grid.cpp
grid = new Block*[size]
for(int i = 0 ; i < size ; i++)
grid[i] = new Block[size]
私は常にオブジェクトへのポインタを使用してではなく、オブジェクト自体を格納することを言われてきたオブジェクトを扱うが、これは、かなりいい作品パフォーマンスがはるかに優れています。私はこのような配列のポインタの第2次元を作成しようとしたときにそう:
error: assigning to 'Block *' from incompatible type 'Block **'; dereference with *
grid[i] = new Block* [size];
^~~~~~~~~~~~~~~~~~
*
C++の方法に若干の新しいビーイング:私はこれに私のコードを変更し
Grid.cpp
grid = new Block*[size]
for(int i = 0 ; i < size ; i++)
grid[i] = new Block*[size];
は、私はエラーを得ました誰かが私が間違っていることを教えてもらえますか?あるいは、私が間違ったことを完全にやろうとしていても?
ありがとうございます!
'new T 'は' T * '型です。したがって、 'new Block *'は 'Block **'型を持ちます。 'grid'は' Block ** '型で' grid [i] 'は' Block * '型です。 2つは同じではありません。ところで、なぜ 'std :: vector>'ではないのですか? –
ああ、 'new'キーワードでオブジェクトを作成すると、オブジェクトへのポインタがデフォルトで返されますか? これらの動的に割り当てられた配列は、オブジェクトの2Dベクトルを作成するよりも高速で効率的です。また、デコンストラクタで手動クリーンアップを行う必要がありますか? – nickcorin
"オブジェクトへのポインタがデフォルトで返されますか?" - どうやって**他の** **あなたはおそらく**動的割り当てを行うことができますか? 「これらの動的に割り当てられた配列は、オブジェクトの2Dベクトルを作成するよりも高速かつ効率的です」と言われています。 (BSが...まったく、絶望的に間違っていたと言った人は誰でも)一般的な真実ではありません。 –