如何创建具有可变行且每行有3列的2D数组?

时间:2018-06-25 17:37:05

标签: c++ arrays multidimensional-array

我在想:

int i,z[3];
int q[i][z[3]];

此声明正确吗?

如果没有,则表明我可以存储i行,每行中包含3个整数。

2 个答案:

答案 0 :(得分:1)

C支持可变长度数组,其中数组大小在运行时确定。

您为q定义的定义是有效的,第一维的大小为i,第二维的大小为z[3]。但是,由于z是一个大小为3的数组,其有效索引为0-2,因此表达式z[3]读入数组的末尾并调用undefined behavior

如果您希望第二维的尺寸为3,只需指定尺寸即可。

int q[i][3];

答案 1 :(得分:0)

@dbush在他的回答中提到了可变长度数组(VLA)

此答案将提供另一种选择。

您可以使用std::vector来实现:

std::vector<std::vector<int>> vec2d; // 2D vector
int row = 2; // row is variable

for (int i = 0; i < row; i++) {
   vec2d.push_back(std::vector<int>(3)); // each row has 3 columns
}

// just for checking the size
for (auto const& v: vec2d) {
   std::cout << v.size() << " "; // 3 3
                                 // ^ ^ each row has 3 columns
}