C++ 尝试填充后,向量大小保持为零
我正在努力有效地使用vector。所以我先保留内存,然后使用向量。但在我尝试使用[]操作符填充向量后,向量的大小仍然为零。为什么会发生这种情况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 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
也没有意义;他可以用合适的大小构造向量。