bja*_*fly 3 c++ stl vector push-back
有人可以详细向我解释为什么vectorY的下面代码会进行分配,但VecY的大小为零?此外,开始和结束迭代器都停留在第一个节点上.似乎保留仅适用于回退,并且如果您希望向量的迭代器和大小按预期工作,则需要构造具有大小的向量.我假设push_back正在进行某种类型的分配,在这种情况下直接分配不是吗?我正在寻找解释这一点的细节,所以我可以确保我理解保留和push_back正在发生什么,而不是使用size元素进行构建,然后像在VecX示例中那样进行赋值.
#include <iostream>
#include <vector>
int main ( int argc, char *argv[])
{
std::vector<int> vecX(2);
vecX[0] = 1;
vecX[1] = 2;
std::cout << " VecX0 Item: " << vecX[0] << std::endl;
std::cout << " VecX1 Item: " << vecX[1] << std::endl;
std::cout << " VectorX Size: " << vecX.size() << std::endl;
std::vector<int> vecY;
vecY.reserve(2);
vecY[0] = 1;
vecY[1] = 2;
std::cout << " VecY0 Item: " << vecY[0] << std::endl;
std::cout << " VecY1 Item: " << vecY[1] << std::endl;
std::cout << " VectorY Size: " << vecY.size() << std::endl;
}
Output
VecX0 Item: 1
VecX1 Item: 2
VectorX Size: 2
VecY0 Item: 1
VecY1 Item: 2
VectorY Size: 0
Run Code Online (Sandbox Code Playgroud)
std::vector<int> vecY;
vecY.reserve(2);
vecY[0] = 1;
vecY[1] = 2;
Run Code Online (Sandbox Code Playgroud)
此代码错误并唤起未定义行为1.当你reserve一个vector,你设置的capacity,而不是size.
您需要或者像在示例1中那样push_back构造它vector.
" 未定义的行为 ":由于超出范围的调用而调用未定义的行为operator[] 如果调用vector::operator[n]where n > vec.size(),则行为为Undefined.
| 归档时间: |
|
| 查看次数: |
1956 次 |
| 最近记录: |