我对C ++编程很陌生,所以请原谅我的愚蠢问题。
我有一个如下所示的数组:
double myarray [15][20000]; // Works ok but stack overflow error if I change 15 to about 200
我想实现这样的目标:
double myarray [total][20000];
然后在运行时我希望用户输入总计:
的值cin>>total
请告知如何实现这一点以及解决此问题的最佳做法是什么,并避免堆栈溢出。
感谢。
答案 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你可以在运行时调整它们的大小。