C ++将数组大小指定为变量并在运行时为变量赋值?

时间:2012-05-01 19:24:24

标签: c++ arrays

我对C ++编程很陌生,所以请原谅我的愚蠢问题。

我有一个如下所示的数组:

double myarray [15][20000]; // Works ok but stack overflow error if I change 15 to about 200

我想实现这样的目标:

double myarray [total][20000];

然后在运行时我希望用户输入总计

的值
cin>>total

请告知如何实现这一点以及解决此问题的最佳做法是什么,并避免堆栈溢出。

感谢。

1 个答案:

答案 0 :(得分:4)

使用vector的{​​{1}}:

vector

你可以像数组一样使用它们,并且不会出现堆栈溢出:

int total;

cin >> total;

//                                      (1)                        (2)
std::vector<std::vector<double>> myVec(total, std::vector<double>(20000));
// (1) is the first dimension and (2) is the second dimension

如果需要,你甚至可以随时将它们变大。

你得到一个堆栈溢出,因为堆栈通常非常小,你试图在它上面分配太大的数组。 myVec[0][4] = 53.24; cout << myVec[0][4]; 在免费商店中使用动态分配的内存,通常更大,并且不会给您带来溢出错误。

此外,在C ++中,必须在编译时知道静态数组的大小,这就是为什么你不能读取数字并使用它,而使用vector s你可以在运行时调整它们的大小。