次のようなテンプレートであるn次元配列クラスを実装しています(データは長さがすべての次元の積である線形配列に格納されています):n次元配列のコンストラクタのテンプレート仕様
template< class valType, int rank >
class NDimensionalArray
{
public:
private:
valType* m_data;
int* m_dimensions;
int m_rank;
};
だから、アイデアは、ユーザー(私は)すなわち、ランク2の配列を指定して、特定の次元のことができるということです。
NDimensionalArray<double,2> matrix(10,10);
今難易1-用のコンストラクタを専門にしています> n次元では、各コンストラクタはn個のパラメータをとり、nはarの階数レイ。今のprintfで使用されているように私は()のvalarrayを使用して考えるが、これは2つの寸法を有する1次元アレイを定義すると、すなわち:
NDimensionalArray<double,1> matrix(10,10);
は完全に許容される行動であろう。コンパイラに繰り返しをさせるために使うことができる素敵なトリックはありますか?現実的にあまりにも長い間、私はランクを知っており、各次元の長さを持っているとして、コンストラクタは、一般的なことができます:
{
int nElements = m_dimensions[0];
for (int i=1 ; i<m_rank ; ++i)
nElements *= m_dimensions[i];
m_data = new valType[nElements];
}
編集:同様の操作をアクセサのために必要とされるであろうこと注意。
また、私がどのように見えるのコンストラクタのオプションを検討している:
のように使用することができNDimensionalArray(const NDimensionalArray<int,1>& dimensions);
:に比べてこれは実行可能なソリューションが、その醜いだろう
NDimensionalArray<int,1> dimVec(2); // Need a specification for 1-dimensional arrays.
dimVec(0) = 10;
dimVec(1) = 10;
NDimensionalArray<double,2> matrix(dimVec);
私が望む使い方。また、多次元配列にアクセスすることは深刻な苦痛となり、アクセスごとに次元ベクトルを構築する必要があります。
は、 '後押ししません::あなたがすべてで、このようなクラスを記述する必要なく正確にあなたがやりたいmulti_array'? –
それは確かにでしょう。それはもっと「私はそれをどうやってできるのだろう」というプロジェクトでした。あなたが知っている好奇心。 – DeusAduro