Mes*_*sop 19 c++ multidimensional-array
您可以声明一个包含10个元素的非常简单的数组,并以这种方式使用它:
int myArray[10];
myArray[4] = 3;
std::cout << myArray[4];
Run Code Online (Sandbox Code Playgroud)
或者声明一个带有10x100元素的二维数组 int myArray[10][100];
甚至创建更复杂的三维数组 int myArray[30][50][70];
我甚至可以写作:
int complexArray[4][10][8][11][20][3];
complexArray[3][9][5][10][15][3] = 5;
std::cout << complexArray[3][9][5][10][15][3];
Run Code Online (Sandbox Code Playgroud)
那么,在声明数组时可以使用的最大维数是多少?
小智 27
该标准建议实现接受至少256(ISO 14882,B.2),但它们可能支持更少或更多:
限制可能会限制包括下面描述的数量或其他数量的数量.建议将每个数量后面的括号内的数字作为该数量的最小值.但是,这些数量仅是指导原则,不能确定合规性.
[...]
- 指针,数组和函数声明符(以任意组合)在声明中修改算术,结构,并集或不完整类型[256].
它在C++ 03和C++ 11中都是一样的.
小智 5
我的第一篇文章!
就其价值而言,我的系统在静态分配时的限制仅为 30 个维度,在堆栈上分配时为 19 个维度。系统是 AMD A10-7700K,64 位(8 GB RAM)。使用默认设置在 Visual C++ 2013 上编译。
请注意,为了确定系统上的最大值,请使用具有最小维度大小 (2) 的最小数据类型 (char)。当维度为 1 时没有限制,因为维度 1(在任何维度中)都是冗余的,并且不会影响数组的整体大小。按理说,数据类型越大或维度越大,可以拥有的维度就越少。然而,我发现任何一维(且只有一维)可以是 3,但不能是 4。
#include<iostream>
int main()
{
char a[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
char b[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!
static char c[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
static char d[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14883 次 |
| 最近记录: |