質問

C ++で2Dダイナミックアレイの作成に問題があります。 「列」の動的数(例:numr)が「列」の数を固定していることを望んでいます。

私はこのようにやってみました:

const numC = 2;
int numR;
numR = 10;
double *myArray[numC];
myArray = new double[numR];

残念ながら、うまくいきません。そのような方法でそれを行うことは可能ですか?

もちろん使用できます double **myArray 両方の寸法が動的であるかのように初期化します(numcがループでリミッターとして使用されています)が、可能であれば避けたいと思います。

前もって感謝します。

役に立ちましたか?

解決

そのような方法でそれを行うことは可能ですか?

はい:

double (*myArray)[numC] = new double[numR][numC];
// ...
delete[] myArray;

これは少し珍しいかもしれませんが、5.3.4§5は明確に述べています。

タイプの new int[i][10]int (*)[10]

多くのプログラマーはC宣言者の構文に精通しておらず、このコードを理解していないことに注意してください。また、手動の動的割り当ては例外ではありません。これらのレーオンの場合、配列のベクトルの方が優れています。

#include <vector>
#include <array>

std::vector<std::array<double, numC> > vec(numR);
// ...
// no manual cleanup necessary

交換 std::arraystd::tr1::array また boost::array, 、コンパイラに応じて。

他のヒント

使用してみませんか std :: vector, 、そしてそれを利用してください コンストラクタ:

std::vector<std::vector<int> > my2Darray(2, std::vector<int>(10));
my2Darray[0][0] = 2;

配列を作成する必要があるため、ループが必要です すべての列に対して.

あなたが望んでいるのは:

double *myArray[numC];
for (int i = 0; i < numC; i++) {
    myArray[i] = new double[numR];
}

// some code...

// Cleanup:
for (int i = 0; i < numC; i++) {
    delete [] myArray[i];
}

これは、一連のポインターを宣言します(へ double) と numC 要素、次にの配列が作成されます doublesと numR 各列の要素 myArray. 。メモリが完了したら、メモリをリリースすることを忘れないでください。または、メモリリークがあります。

インデックスは行、次に列にする必要があります。

double** myArray = new double*[numR];
for( unsigned int i = 0; i < numR; i++ ) {
    myArray[i] = new double[numC];
}

アクセス行2、列5:

myArray[2][5];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top