如何在C++中创建大型数组(如60亿)?

Hun*_*hun 0 c++ arrays

我正在尝试创建一个大尺寸阵列(约80000*80000)

我试过了

int *bigarray = new int[80000*80000];
Run Code Online (Sandbox Code Playgroud)

但它给了我错误

抛出'std :: bad_alloc'的实例后调用terminate
():std :: bad_alloc

我想要做的是创建一个社交网络的边缘矩阵.

任何人都可以告诉我如何创建一个大型数组或任何其他方法来解决它?

谢谢!

Gal*_*lik 9

您可以通过不使用来停止溢出警告int,使用unsigned long long- 添加ULL到文字数字的末尾:

auto arr = new int[80000ULL * 80000ULL];
Run Code Online (Sandbox Code Playgroud)

我建议使用一个std::vector而不是原始的动态数组:

auto vec = std::vector<int>(80000ULL * 80000ULL);
Run Code Online (Sandbox Code Playgroud)

你的std::bad_alloc意思是你没有足够的记忆....

我想要做的是创建一个社交网络的边缘矩阵.

您可以查看使用"稀疏矩阵".如果数组中的大多数位置为空,则可以使用仅记录已占用单元格值的数据结构.

一个粗略的例子是使用a std::map<std::size_t, std::map<std::size_t, int>>但是有一些专用的库可以做得更好.

例如,特征库.(道具@yar)