为什么声明大小的向量可以直接从cin接受输入,如下所示:
int n;
cin>>n;
vector<int> a(n);//Vector declared with size
for(int i=0;i<n;i++)
cin>>a[i];
但是声明没有大小的向量需要push_back()函数来接受如下输入:
int n;
cin>>n;
vector<int> a;//Vector declared WITHOUT size
int input;
for(int i=0;i<n;i++){
cin>>input;
a.push_back(input);
}
解决方法:
在向量上使用[]运算符假定给定索引处的对象有效.如果您的向量尚未分配其内部缓冲区以适合此索引,则这是未定义的行为.或者,push_back()只是附加到向量的末尾并重新分配更大的内部缓冲区(如果需要),因此它永远不会以相同的方式执行未定义的行为.通过在使用[]访问向量之前显式调整向量大小,调整数组的大小,以便定义访问元素0到n-1,但超出n-1的任何内容都是未定义的行为.