我正在尝试创建一个大型数组(大约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/

10-10 21:05