2016-09-22 10 views
0

私は機能を持っている:既知の第2次元を持つC++配列を動的に作成する方法は?

void foo(double[][4]); 

私は、関数に渡すことができるように、私は2次元配列を割り当てるにはどうすればよい4に等しい第二次元と2次元配列をとりますか?私がこれを行うなら:

double * arr[4]; 
arr = new double[n][4]; 

ここでnはコンパイラには分かりません。私はそれをコンパイルすることはできません。一般的な2dダイナミック配列を使用すると、関数fooはそれを受け取りません。

+1

なぜあなたはあなたのstd ::ベクトルではないのですか?配列はちょうどcではありません+ + –

+0

@ Android400 vectorは古いスタイルの配列の代わりになりません.. std :: arrayは –

+0

typedefを使用してください... –

答えて

2
typedef double v4[4]; 
v4* arr = new v4[n]; 

しかし、配列とベクトルに切り替えることを検討してください。尋ねたよう

4

は、それはtypedefあなたがより不可解であることを取得せずにtypedef

typedef double four[4]; 
four *arr;  // equivalently double (*arr)[4]; 
arr = new four[n]; 

を使用するのが最善である

double (*arr)[4]; 
arr = new double [n][4]; 
あなたは本当に標準コンテナを使用することを検討すべきである

std::vector、など)コンテナのコンテナです。

-2

はまた新しいタイプを作成し、シンボルを占有するには、ポインタへのポインタを作成することができ、それはそのように実行します。jに対し

double **arr = new double*[j]; 
for (int i = 0; i < j; ++i) 
{ 
    arr[i] = new double[4]; 
} 

は、動的な値を保持しているint変数です。 私はそれが働いていることを示す簡単なコードを書いた、それをチェックアウトhere

0

私はそれがOPの意図したものではないかもしれないが、同様の答えを必要とする他の人に役立つかもしれないことを知っている。

静的に正常な配列の動的配列を作成しようとしています。物事は簡単に簡単です、これらのコンテナでstd::vectorstd::array

:STLはあなたのソリューションを持って

std::vector<std::array<int, 4>> foo; 

// Allocate memory 
foo.reserve(8); 

// Or instead of 8, you can use some runtime value 
foo.reserve(someSize); 

// Or did not allocated 8 + someSize, but ensured 
// that vector has allocated at least someSize 

// Add entries 
foo.push_back({1, 2, 3, 4}); 

// Looping 
for (auto&& arr : foo) { 
    arr[3] = 3; 
} 

// Access elements 
foo[5][2] = 2; 
関連する問題