次のような配列があるとします。
double theArray[2][5][3][4];
最後の次元がよくわかりません。
first is [][][][][]
second is [][][][][]
[][][][][]
third would make it 3 dimensional,
四代目はどうする?
次のような配列があるとします。
double theArray[2][5][3][4];
最後の次元がよくわかりません。
first is [][][][][]
second is [][][][][]
[][][][][]
third would make it 3 dimensional,
四代目はどうする?
4 番目の次元は時間です。3 つの空間次元と共に時空を形成します。
C と C++ の両方で、2 次元配列は単なる配列の配列であり、それ以上でもそれ以下でもありません。
3 次元配列は、配列の配列の配列です。
あなたが持っているもの:
double theArray[2][5][3][4];
4 次元配列、配列の配列の配列の配列です。
空間次元の観点から考えている場合、配列の次元のいずれにも必ずしも物理的な意味があるとは限りません。それらは単に順序付けられた要素のシーケンスであり、シーケンス自体がシーケンスである場合もあります。
配列が持つことができる次元の数に制限はありません(コンパイル時と実行時の記憶域スペース、およびコンパイラによって課される任意の制限を除いて)。
2 次元配列の場合、要素が長方形のグリッドに配置されていると考えることができます。
[][][][]
[][][][]
[][][][]
しかし実際には、すべてが線形であり、各行はメモリ内の前の行の直後に続きます。
[][][][][][][][][][][][]
- row0 -- row1- - row2 -
多次元配列のように機能する他のデータ構造を構築することもできます。ポインタやポインタの配列などを使用すると、要素と行がメモリ内に散在する可能性があります。しかし、それはほとんどの目的にとって重要ではありません。
comp.lang.c FAQのセクション 6 には、C における配列とポインターの間のしばしば混乱を招く関係についての非常に優れた議論があり、そのほとんどは C++ にも当てはまります。
C++ は、標準ライブラリの一部として、C スタイルの配列よりも柔軟で堅牢な他のデータ構造を提供します。
世界の人口を追跡するために多次元配列を使用したいとします。
// Population per country:
int population[ C ];
// the 1st dimension is the country index, C is the number of countries
// Population per country per state:
int population[ C ][ S ];
// the 2nd dimension is the state index, S is the max number of states per cuntry
// Population per country per state per county:
int population[ C ][ S ][ N ];
// the 3rd dimension is the county index, N is the max number of county per state
// Population per country per state per county per city:
int population[ C ][ S ][ N ][ I ];
// the 4th dimension is the city index, I is the max number of city per county
// Population per country per state per county per city per gender
// Population per country per state per county per city per gender per age-group
注: これは単なる例であり、母集団をモデル化する最良の方法ではありません。
注 2: Jerry Coffin の回答も参照してください。