2010-12-29 5 views
6

2次元配列を連続メモリブロックに作成しようとしましたが、NサイズのM連続ブロックを与えています。2次元配列を連続メモリブロックで動的に作成する

int **arr = new int*[M]; 
for (int i = 0 ; i < M ; i++) 
{ 
    arr[i] = new int[N]; 
} 

連続メモリブロックに2Dアレイを作成するにはどうすればよいですか?

+4

** **あなた自身では行わないでください。 boost :: multi_arrayを使用してください。 –

+5

ええ、何も新しいことを学んではいけません。猿のようなコードです。 – bartimar

答えて

13
int *buffer=new int[M*N]; 
int **arr=new int*[M]; 
for(int i=0;i<M;++i) 
    arr[i]=buffer+i*N; 

実際には、arrポインタを格納する必要はありません。必要に応じて計算できます。

+1

このアプローチは、あるクラスのオブジェクトの配列を作成したい場合には有効でしょうか? – Nawaz

+1

ここに問題はありません。コンストラクタは一度呼び出されます。 – maxim1000

+1

である。きがついた。ところで、私は考えていた、非デフォルトのコンストラクタのためにそれを動作させることができますか?配列の各オブジェクトは異なる値で初期化する必要がありますか? – Nawaz

関連する問題