我对 C++ 编程非常陌生,所以请原谅我的愚蠢问题。
我有一个如下所示的数组:
double myarray [15][20000]; // Works ok but stack overflow error if I change 15 to about 200
我想实现这样的目标:
double myarray [total][20000];
然后在运行时我希望用户输入总计的值:
cin>>total
请就如何实现这一目标以及解决此问题和避免堆栈溢出的最佳实践提出建议。
谢谢。
最佳答案
使用 vector
的 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];
如果需要,您甚至可以即时将它们放大。
您会遇到堆栈溢出,因为堆栈通常非常小,并且您试图在其上分配太大的数组。 vector
在免费存储上使用动态分配的内存,该内存通常大得多并且不会给您带来溢出错误。
此外,在 C++ 中,静态数组的大小必须在编译时已知,这就是为什么您无法读取数字并使用它,而使用 vector
您可以在运行时调整它们的大小.
关于C++ 将数组大小分配为变量并在运行时为变量赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403059/