C++ “巨大向量”;挂起;节目?(50000 x 50000个电池)

C++ “巨大向量”;挂起;节目?(50000 x 50000个电池),c++,vector,multidimensional-array,size,C++,Vector,Multidimensional Array,Size,我想要一个数组,grid[50000][50000],我尝试使用vector,但当我运行代码时,它停止了。没有错误。等等,有什么建议吗 #include <iostream> #include <vector> using namespace std; typedef std::vector<int> IntVec; typedef std::vector<IntVec> IntGrid; IntGrid grid(50000, IntVec(

我想要一个数组,grid[50000][50000],我尝试使用vector,但当我运行代码时,它停止了。没有错误。等等,有什么建议吗

#include <iostream>
#include <vector>

using namespace std;

typedef std::vector<int> IntVec;
typedef std::vector<IntVec> IntGrid;
IntGrid grid(50000, IntVec(50000));

int main(){
  grid[0][0]=3;
  cout<<grid[0][0]<<endl;
}
#包括
#包括
使用名称空间std;
typedef std::vector IntVec;
typedef std::向量IntGrid;
IntGrid网格(50000,IntVec(50000));
int main(){
网格[0][0]=3;

cout作为一个非常粗略的计算

50000行×50000列×4字节/整数=
1000000000字节

除非你的计算机内存超过10GB,否则你的内存已经用完了


您是否可以重写程序以处理较小的数据块,或使用文件存储阵列中不需要立即访问的部分?

“我想要一个阵列,网格[50000][50000]”-为什么?这是一个实际需求还是基于您提议的实现的感知需求?占用的内存太多了,可能有更好的方法,但您需要告诉我们您试图解决的问题。@EdS。您能看看这里吗:我想将该代码用于至少50k的输入。cac[50k][50k]@vk7x:想要的东西不会让它们发生。你应该查找稀疏矩阵之类的。链接问题的建议倾向于指向类似
std::map
或任何其他形式的稀疏存储方案。一次保存这么多内存几乎是不可能的(除非你拥有一台高端机器,并且你对操作系统的资源管理持乐观态度)。@vk7x:我不太清楚单词包装算法,所以我在这里无能为力。你介意再问一个问题,准确描述一下你想做什么吗(如有可能,用外行人对您打算使用的算法的描述进行文字包装),以及您的输入大小要求?您可能会得到比这里的答案更有用的答案,因为您将询问您的实际问题,其中可能有许多您没有想到的解决方案。请看这里:我想将该代码用于至少50k输入。cac[50k][50k]。你为什么不告诉我们你想完成什么?也许我们可以想出一个更有效的解决方案。@AJG85:不,std::vector的空间开销是常数,所以对于嵌套的,开销是O(n),相对于O(n²),这是完全可以忽略的n大到50000时的数据量。@LeftArounda嵌套向量是否不维护自己的开始和结束指针等?我想即使是这样,它也只会增加几百MB,相比之下这相对较小。@AJG85
vector
可能有三个字:指针、大小和容量。在64位实现中at的24字节/向量。对于结构向量,50K*24大约是1MB的开销。对于malloc开销,可能又是1MB,所以我们只有几MB,而不是几百MB。