2

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

我有一个看起来像这样的数组:

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

我想实现这样的目标:

double myarray [total][20000];

然后在运行时我希望用户输入total的值:

cin>>total

请就如何实现这一点以及解决此问题和避免堆栈溢出的最佳实践提出建议。

谢谢。

4

1 回答 1

4

使用svector的a 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++ 中,静态数组的大小必须在编译时知道,这就是为什么您不能读取数字并使用它的原因,而使用vectors 您可以在运行时调整它们的大小。

于 2012-05-01T19:26:41.083 回答