- 締切済み
C++で領域の確保の方法
今C++の勉強中なのですが、 領域の確保の方法でいい方法が知りたいのです。 ポインターのポインターを使って二次元配列の領域を確保したいのですがいい方法が思いつきません。 int **pBox; pBox = new int *[ 10 ]; for( int i=0; i<10; i++ ) { pBox[ i ] = new int[10]; } //ちなみに今はこんな感じのものしか考え付きませんint型[10][10] を確保したつもりです。 間違っていたら教えていただきたいです。 本題はこちらで、もっと効率のいい確保の方法を知りたいのでご協力を よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Schwarz20
- ベストアンサー率46% (6/13)
以下のようなコードは、どうでしょうか? int **pBox; int *pArea; pArea = new int[10 * 10]; // 全体の領域を確保する pBox = new int *[10]; for (int i = 0; i < 10; i++) { pBox[i] = &pArea[i * 10]; // ポインターの配列にそれぞれのアドレスを設定する } C++やC言語での多次元配列で確保したメモリ領域は、1次元配列と同じように連続した領域が確保され、 一方、ポインタは、それぞれ独立したメモリーアドレスを設定することができるので それを利用したものです また、この方法は、以下の特徴があります ・全体の領域を一括してdeleteすることができること ・ポインターを入れ替えることができること (配列の内容を入れ替えるより早い処理が可能としている)
- jacta
- ベストアンサー率26% (845/3158)
要素数が固定でよいなら int (*pBox)[10] = new int[10][10]; とするのが一番簡単です。 可変にしたいなら、 std::vector<std::vector<int> > box;
お礼
返事遅れました。 ご回答ありがとうございます。 ご回答いただいた std::vector について調べていたので・・・ とても便利な領域の取り方が出来て凄いのですが、 色々他の機能があるみたいですし、もう少し調べてみようと 思います。 他にも malloc() や new を応用した方法も知りたいので出来ればお願いします。
お礼
なるほど~ こんな方法もあるのですね。 とても勉強になります。 ご回答ありがとうございます。