我正在尝试创建一个大型数组(大约80000 * 80000)
我试过了
int *bigarray = new int[80000*80000];
但这给了我错误
抛出'std :: bad_alloc'实例后调用终止
what():std :: bad_alloc
我要做的是创建社交网络的边缘矩阵。
谁能告诉我如何创建大尺寸数组或任何其他方法来解决它?
谢谢!
最佳答案
您可以通过不使用int
来停止溢出警告,使用unsigned long long
-在文字数字的末尾添加ULL
:
auto arr = new int[80000ULL * 80000ULL];
我建议使用
std::vector
而不是原始动态数组:auto vec = std::vector<int>(80000ULL * 80000ULL);
您的
std::bad_alloc
表示您没有足够的内存。我要做的是创建社交网络的边缘矩阵。
您可以研究使用“稀疏矩阵”。如果阵列中的大多数位置为空,则可以使用仅记录占用单元格值的数据结构。
一个粗略的例子是使用
std::map<std::size_t, std::map<std::size_t, int>>
,但是那里有一些专用的库会做得更好。例如Eigen Library。 (道具@yar)
关于c++ - 如何在C++中创建大型数组(如60亿个数组)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51921121/