C++ 尝试填充后,向量大小保持为零

C++ 尝试填充后,向量大小保持为零,c++,vector,C++,Vector,我正在努力有效地使用vector。所以我先保留内存,然后使用向量。但在我尝试使用[]操作符填充向量后,向量的大小仍然为零。为什么会发生这种情况 vector Vec; Vec.reserve(10); Vec[0] = 2.0; Vec[1] = 3.0; ... reserve()不会调整向量大小。您需要使用resize()reserve()仅在备份存储中保留空间,以便后续推送的元素不必重新分配(直到超出保留空间)。但它不会改变向量的实际大小,因此您的Vec[0]=访问实际上是在向量的

我正在努力有效地使用vector。所以我先保留内存,然后使用向量。但在我尝试使用[]操作符填充向量后,向量的大小仍然为零。为什么会发生这种情况

vector Vec; 
Vec.reserve(10); 
Vec[0] = 2.0; 
Vec[1] = 3.0;
...
reserve()
不会调整向量大小。您需要使用
resize()

reserve()
仅在备份存储中保留空间,以便后续推送的元素不必重新分配(直到超出保留空间)。但它不会改变向量的实际大小,因此您的
Vec[0]=
访问实际上是在向量的末尾运行

你可以用

vector Vec;
Vec.resize(10);
Vec[0] = 2.0;
Vec[1] = 3.0;
vector Vec;
Vec.reserve(10);
Vec.push_back(2.0);
Vec.push_back(3.0);
如果你愿意,尺码是10号。或者,如果您希望此时的大小仅为2,但仍保留空间以避免多次重新分配,则可以使用

vector Vec;
Vec.resize(10);
Vec[0] = 2.0;
Vec[1] = 3.0;
vector Vec;
Vec.reserve(10);
Vec.push_back(2.0);
Vec.push_back(3.0);

使用
reserve
时,实际上并不是在向量中创建元素。您的分配正在访问不存在的元素。

std::vector不会自动展开。函数保留(大小)不会增加大小,它只能确保您有足够的内存用于以后的大小扩展

所以不是非法的

Vec[0] = 2.0;
试一试

这将使向量大小增加1

顺便说一下,声明应该是

vector<double> Vec;
Vec;

保留
对向量的大小没有影响。在大多数情况下 在我使用的实现中,以下访问 导致程序终止。如果没有,你可能 用错误的选项编译

应直接构造大小为10的向量:

std::vector<double> vec( 10 );
std::vec(10);
如果要插入的值是常量,则可以执行以下操作: 比如:

static double initVec[] = { 2.0, 3.0 ... };
std::vector<double> vec( begin( initVec ), end( initVec ) );
staticdoubleinitvec[]={2.0,3.0…};
向量向量(begin(initVec),end(initVec));
,或者如果您使用的是C++11:

std::vector<double> vec{ 2.0, 3.0 ... };
std::vector向量{2.0,3.0…};
这两种方法都具有初始化
直接在矢量中输入数据。

您将保留与调整大小混合。为什么混合?我不想用reszing初始化为什么你不直接推到向量中?因为我想在order@Andr当然,使用
resize
也没有意义;他可以用合适的大小构造向量。