如何使用用户输入的值声明(多维)数组?

时间:2013-12-02 20:43:23

标签: c++ arrays multidimensional-array

我们在学校教的是:

int x;
cin >> x;
int array[x];

OR

int x, y;
cin >> x >> y;
int array[x][y];

但是,我知道它在C ++中是无效的代码。但即便如此,它仍然可以完成工作并按预期工作,但是,我希望找到它如何正确完成的答案?

4 个答案:

答案 0 :(得分:5)

这不是标准的C ++,但包括gccclang在内的许多编译器都支持variable length arrays作为 C ++ 的扩展,即使它是 C99 功能。如果gcc标志与类似的消息一起使用,则clang-pedantic都会警告您这是一个扩展名:

  

警告:ISO C ++禁止变长数组'array'[-Wvla]

标准C ++中的替代方案是使用std::vector或通过 new 进行动态分配:

int x;
cin >> x;
int *array new int[x] ;
//...
delete [] array ;

2D 动态分配案例在How do I declare a 2d array in C++ using new?中得到了很好的介绍。使用容器可能更好,因为您不必担心删除之后分配的内存。

答案 1 :(得分:5)

适当地使用动态数组:

int x;
cin >> x;
int* array = new int[x];

请注意,在这种情况下,您有责任释放分配的内存;或使用智能指针。

另一种方法是使用STL容器,例如vector

答案 2 :(得分:3)

通常通过使用标准容器std :: vector或通过在堆中动态分配数组来完成。例如

int x, y;
cin >> x >> y;
int **array = new int * [x];

for ( size_t i = 0; i < x; i++ ) array[i] = new int[y];

答案 3 :(得分:3)

获得动态大小数组的最简单方法是使用std::vector

int x;
cin >> x;
vector<int> array(x);

多维数组有点复杂;一个选项是:

int x, y;
cin >> x >> y;
vector<vector<int>> array(x, vector<int>(y));

更高效,但不那么简单,您可以考虑使用大小为x*y的一维数组,其中访问器函数将被视为二维。