【发布时间】:2018-04-02 18:53:16
【问题描述】:
我在使用 C++ 中的大量向量时遇到了一些问题。
基本上我不想要一个包含 200 万个元素的数组,每个元素都是一个 vector<int>(用于构建邻接列表)。
所以当我执行vector<int> myList[10] 时效果很好,但是当我执行vector<int> myList[2000000] 时它不起作用,我不知道为什么。
我试图做unsigned long int var = 2000000; vector<int> myList[var];,但仍然是同样的错误。 (不知道是什么错误,我的程序就崩溃了)
如果你有任何想法,
谢谢
【问题讨论】:
-
您是否要将此数组声明为局部变量?
-
可能有帮助 - 将
var更改为const unsigned long int- 可变长度数组是编译器扩展,而不是 C++ 的一部分。添加const使其“正确”,因为数组长度是在编译时确定的,这消除了可疑行为的可能来源。 -
使用向量的向量。如您所见,尝试在堆栈上声明该大小的数组很可能会失败。如果您愿意,也可以将其设为全局或静态。 耸耸肩
-
谢谢。我会尝试使用向量的向量,但我不明白,200 万乘以 24B 对内存来说并没有那么大:/
-
sizeof(vector)可能在 24 字节左右。其中 200 万个大约是 45 兆字节。默认堆栈大小通常比这小得多,因此如果您尝试将其设为局部变量,则会出现堆栈溢出。在堆上,这不是那么多。