2017-09-30 5 views
0

アレイの作成を理解するのを助ける:タスクは、任意の数の測定値とそれらの任意の深度を持つ配列を動的に構築することです。 入力は任意の(n)個の要素を持つ1次元配列int arr []を受け取ります。たとえば、int arr= new int[size]のような1次元配列を作成することができ、2次元配列int **arr= new int*[size]などを作成することができますが、次元数が分からない場合はどうすれば作成できますか?私はちょうどC++を学び始めたので、オブジェクト指向プログラミングとベクトルを使うことはできません1次元ダイナミックアレイをN次元に反転する

+0

ディメンションは、索引付けの問題として考えることができます。 – VTT

+0

あなたは1次元配列を作成して、サイズを同じサイズにすることができます。 4次元配列? –

+0

たとえば、6つの項目で配列を作成することができます。 2D配列2x3または3x2アイテム、1x2x3または1x3x2アイテムの3D配列など、6つのアイテムを持つ1D配列を含むものと考えることができます。 – VTT

答えて

0

これらのコメント者の中には、多次元配列の代わりに大きな1次元配列を作成する方法もありますが、例えば

int *arr = new int[wLength * zLength * yLength * xLength]; 

、代わりにこのようarr[w][z][y][x]インデックスこのようなインデックスの

arr[w * zLength * yLength * xLength + z * yLength * xLength + y * xLength + x]。もちろん

あなたは(与えられたNは定数式である)N次元配列の種類をしたい場合、あなたはこのような過負荷でテンプレートを使用することができます。その定義により

template <typename T, int N> 
struct NDimensionalArray { 
    typedef typename NDimensionalArray<T, N-1>::Type *Type; 
}; 

template<typename T> 
struct NDimensionalArray<T, 0> { 
    typedef T Type; 
}; 

、あなたはこれらを取得しますタイプ:

std::is_same<NDimensionalArray<char, 1>::Type, char*>::value; // true 
std::is_same<NDimensionalArray<char, 2>::Type, char**>::value; // true 
std::is_same<NDimensionalArray<char, 3>::Type, char***>::value; // true 

N次元配列への新規作成、削除、および索引付けのためのカプセル化されたN次元配列クラス。 (ヒント:作成/削除時にサイズを表すためにstd::array<unsigned int, N>を使用し、インデックスにインデックスを付けるときはインデックスを使用します)。

関連する問題