如何表示一个数组 [100000][100000] 在 C++ 中只存储 0 或 1? [关闭]

Posted

技术标签:

【中文标题】如何表示一个数组 [100000][100000] 在 C++ 中只存储 0 或 1? [关闭]【英文标题】:how can I represent an array [100000][100000] storing only 0 or 1 in c++? [closed] 【发布时间】: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 上的文件可能是解决方案。如果需要,实施缓存系统。 【参考方案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();

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

不确定你真的想这样做。

【讨论】:

以上是关于如何表示一个数组 [100000][100000] 在 C++ 中只存储 0 或 1? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

c++ 数组大小以及如何管理大数组?

java 如何创建一个类或方法能够给出指定位数的一个随机“大数”?

树状数组入门(求和)

bzoj4627[BeiJing2016]回转寿司 离散化+树状数组

如何在 C++ 中声明 10000 x 100000 大小的整数矩阵

如何在 SQL Server 中插入 100000 行?