Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为向量向量分配内存_C++_Vector - Fatal编程技术网

C++ 为向量向量分配内存

C++ 为向量向量分配内存,c++,vector,C++,Vector,我试图为向量向量保留空间,但它不起作用,并引发以下错误: terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc 每次我都使用足够大的数字。以下是我所拥有内容的最低版本: #include <vector> #include <iostream> using namespace std; int main(){ int base; c

我试图为向量向量保留空间,但它不起作用,并引发以下错误:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
每次我都使用足够大的数字。以下是我所拥有内容的最低版本:

#include <vector>
#include <iostream>
using namespace std;


int main(){

  int base;
  cout << "Enter Base: ";
  cin >> base;

  int dimension;
  cout << "Enter Dimension: ";
  cin >> dimension;

  int perms = 1;
  for(int i=0; i<dimension; i++){
    perms *= base;
  } // This gets the number of permutations with repetition

  int length;
  cout << "Enter Length: ";
  cin >> length;

  float structSize = 1.0;

  for(float i=0.0; i<length; i++){
    structSize *= perms-i;
    structSize /= (i+1.0);
  } // This gets the number of combinations

  vector< vector< vector<double> > > allStructs;
  allStructs.reserve(structSize); 

  return 0;
}
#包括
#包括
使用名称空间std;
int main(){
int-base;
cout>base;
整数维;
cout>维度;
int perms=1;
对于(int i=0;i长度;
浮动结构尺寸=1.0;
对于(浮点i=0.0;i>allStructs;
所有结构保留(结构大小);
返回0;
}

它应该适用于较大的structSize,但在base=3、dimension=4、length=6时失败,这使得structSize=324540216。这是否可行?

将structSize声明为
double structSize=1.0;
然后它应该“逻辑”工作


但是,由于电脑上可能存在内存限制,
reserve()
可能无法工作。

将StructSize声明为
double StructSize=1.0;
然后它应该“逻辑”工作


但是,由于电脑上可能存在内存限制,
reserve()
可能无法工作。

您需要考虑内存使用情况

它应该适用于较大的structSize,但在基=3、维度=4、长度=6时失败,这使得structSize=324540216。这是否可行

因此,在抽象级别,您所做的是分配一个包含
324540216
向量对象实例的数据结构

以下是我们对
向量
对象的了解:

  • 它的大小必须至少为16个字节;它需要存储一个指针(在64位体系结构中可能为8个字节),并且它需要存储一个大小(也可能为8个字节)
  • 它的大小可能会大得多,因为在实例化最后一个
    向量
    对象的那一刻,每次创建一个对象时,它将消耗另一个[至少-]16字节

因此,从表面上看,您的
allStructs.reserve(structSize)
调用分配的是5G字节。它可能分配的不止这些,因为向量元数据的大小很可能大于16字节。

您需要考虑内存使用情况

它应该适用于较大的structSize,但在基=3、维度=4、长度=6时失败,这使得structSize=324540216。这是否可行

因此,在抽象级别,您所做的是分配一个包含
324540216
向量对象实例的数据结构

以下是我们对
向量
对象的了解:

  • 它的大小必须至少为16个字节;它需要存储一个指针(在64位体系结构中可能为8个字节),并且它需要存储一个大小(也可能为8个字节)
  • 它的大小可能会大得多,因为在实例化最后一个
    向量
    对象的那一刻,每次创建一个对象时,它将消耗另一个[至少-]16字节

因此,表面上看,您的
allStructs.reserve(structSize)
call分配的是5G字节。它可能分配的不止这些,因为向量元数据的大小很可能大于16字节。

是的,这是可能的-为你的PC添加更多内存你计算过这需要多少内存吗?你真的要存储每个结果吗?你不能只迭代结果吗ead?我想知道你是否真的在计算正确的structSize。你只需要计算你实际想要保留的
vector
数量。这应该是一个相对较小的数字。我觉得你在计算你需要的翻倍的总数。但即使这样也已经超过2GB,这可能太多了在32位机器上使用ch,在64位机器上仍然使用很多。是的,这是可能的-向你的PC添加更多内存。你计算过这需要多少内存吗?你真的要存储每个结果吗?你不能只迭代结果吗?我想知道你是否真的在计算正确的structSize。你只需要计算多少
vector
您实际上想要保留。这应该是一个相对较小的数字。我觉得您正在计算所需的双倍缓存的总数。但即使这样,也已经超过2GB,在32位机器上可能太多,在64位机器上仍然很多。从技术上讲,vect的大小没有限制或者,如果它存储的只是一个指向其他地方的向量数组的索引。即使在更现实的一面,我也看到了一个
std::string
的实现,其中内部指针指向数据,并将大小和容量存储在mData[-4]和mData[-8],这意味着
printf(“%s”,myStdString)
实际上会起作用。@MooingDuck公平点,尽管当用户试图实际存储和处理每个索引中的值时,它仍然会导致内存分配问题。从技术上讲,如果向量存储的都是指向其他地方的向量数组的索引,则向量的大小没有限制。即使在更现实的一面,我也会说一个
std::string
的实现,其中内部指针指向数据,并将大小和容量存储在mData[-4]和mData[-8],这意味着
printf(“%s”,myStdString)
实际上可以工作。@MooingDuck Fair point,尽管在用户试图实际存储和处理每个索引中的值时,它仍然会导致内存分配问题。