我正在尝试在类中创建一个C ++大小为66000 X 66000的图形邻接列表,所以我不能使用C ++ 11自动功能来创建数组。此外,当我尝试int * array = new int [66000 * 66000],这是我在另一个堆栈溢出中看到的东西将它放在堆上时,我得到一个整数溢出错误。有没有办法可以创建这样大小的数组?谢谢。
答案 0 :(得分:4)
让我们说所有这些66000 * 66000都是int
s,然后消耗大约66000 * 66000 * 4/2 ^ 30 = 16G内存。你真的想这样做吗?
答案 1 :(得分:4)
您提到的溢出是因为66000 * 66000
在我们的案例中不适合int
。
如果拥有如此庞大的阵列是一个好主意,这是值得怀疑的。但如果您愿意,可以尝试 long long
:
int *array = new int[66000LL * 66000];
虽然它可能超过了系统上允许的最大阵列大小,但请参阅例如Compiler Error C2148
同样,您可以尝试使用malloc
。但即使使用char
代替int
(这应该足够用于邻接),也要准备好看到相当无响应的系统。
答案 2 :(得分:1)
由于您正在构建图形邻接列表,我猜测:
因此,不是将邻接信息存储为2D数组,而是通过存储数组的“仅1”来节省空间,例如:作为(x,y)对的列表。
有关详细信息,请参阅:
答案 3 :(得分:1)