【问题标题】:how can I represent an array [100000][100000] storing only 0 or 1 in c++? [closed]如何表示一个数组 [100000][100000] 在 C++ 中只存储 0 或 1? [关闭]
【发布时间】:2016-03-01 20:38:58
【问题描述】:

我试过了:

vector<int <vector> > Graph(100000, vector<int> (100000)) ;

vector<bool<vector> >Graph  (100000,vector<bool> (100000)) ; 

bool Graph [100000][100000] ;

...但它们都不起作用。

【问题讨论】:

  • 不要为 C++ 问题添加 C 标签!
  • 你不觉得有点太大了吗?
  • 这是非常不具体的但它不起作用。你认为我们能猜到哪里出了问题吗?当您提出问题时,为什么它不起作用是必不可少的。因为这也反映了您对问题的理解程度,所以当您尝试做一些您还没有准备好做的事情时,可能会出现这种情况。
  • 您确定您的计算机有超过 37.25GiB 的内存吗? (假设int 是 4 字节长)
  • 将矢量保存为硬盘或 SSD 上的文件可能是解决方案。如果需要,实施缓存系统。

标签: c++ vector boolean


【解决方案1】:

vector的vector的正确创建方式是:

vector<vector <int> > Graph(100000, vector<int> (100000));

但请注意,此数组将占用 10^5 * 10^5 * 4 = 400 亿字节(假设您的 int 为 32 位)或大约 40 GB 的 RAM。当然,你必须拥有那么多的记忆。

【讨论】:

  • 您指的是哪些特殊标志?
  • 我从来不需要任何特殊的标志来分配它(我使用了几种不同的编译器)。我什至不需要那么多 ram+swap 来分配它。许多页面在分配时最终“需求为零”,并且在您在那里写一些非零之前不会使用内存。
  • @JSF ,天顶。唉,我不太记得了。我知道有几个(可能是 5 年)我需要一个 10 GB 的向量来解决我在比赛中解决的问题。编译器(或链接器——我不记得了)打印了一些错误,我只是在添加了一些标志后才修复它。我将删除这句话,因为我没有一个例子来支持它。
【解决方案2】:

做得好

int wMyArray[100000][100000];

会给你这个编译时错误:error C2148: total size of array must not exceed 0x7fffffff bytes

然后用向量做:

std::vector<std::vector<int>> wMyVector(100000, std::vector<int>(100000));

wMyVector.back().back();

加载需要很长时间,您实际上可以看到加载时工作字节的数量在增加。

不确定你真的想这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2013-04-04
    • 1970-01-01
    • 2021-03-30
    • 2016-01-17
    相关资源
    最近更新 更多