如何表示一个数组 [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? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
java 如何创建一个类或方法能够给出指定位数的一个随机“大数”?
bzoj4627[BeiJing2016]回转寿司 离散化+树状数组