如何在C ++中声明大小为100001x100001的二维数组?

时间:2014-10-22 00:01:27

标签: c++ multidimensional-array

我正在尝试在main函数之外声明一个大小为100001x100001的2D数组,但是我得到“数组的大小太大”。 我该怎么做 ? 我的代码

bool connected[100001][100001];

main()
{
    ...
}

1 个答案:

答案 0 :(得分:2)

您可能希望使用uint8_t而不是bool来压缩此矩阵。

假设每个uint8_t有8个bool。 100001/8 = 12,500 因此,在每一行中,有12,500列。

宣言将是:

  uint8_t connections[100001][100001/8];

大多数编程环境都不允许您在全局区域声明一个巨大的数组。您可能需要调整默认设置才能执行此操作。

另一种选择是使用动态分配:

int main(void)
{
  const unsigned int allocation_size = 100001 * (100001 / 8);
  uint8_t * connections = new uint8_t [allocation_size];
  // ...
  delete[] connections;
  return 0;
}

您必须使用 bit twiddling 来访问相应的列。