为什么清除向量后为什么要得到前元素值? 我想念一些明显的东西吗?我也尝试使用擦除功能,并得到了相同的结果。这里的预期结果是什么?向量的大小在清除后也显示为0,但vect.front()显示一个值。 我的代码如下:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector <int> vect;
vector <int>::iterator it;
vect.push_back(10);
vect.push_back(3);
vect.push_back(5);
for( int i=0;i<vect.size();i++)
{
cout<<vect[i]<<endl;
}
vect.clear();
cout<<"front element "<<vect.front()<<endl;
cout<<"last element "<<vect.back()<<endl;
if(vect.empty())
cout<<"empty"<<endl;
return 0;
}
输出为:
nm@nm:~$ g++ vectortest2.cpp
nm@nm:~$ ./a.out
10
3
5
front element 10
last element 0
empty
nm@nm:~$
答案 0 :(得分:3)
在空载体(或任何容器)上调用front()
或back()
是未定义的行为,因此任何事情都会发生。
碰巧的是,当您clear()
std::vector
时,您正在从中“擦除”元素,因为size()
递减了,但是内部数组的物理内存仍被分配,而capacity()
保持不变。
因此,在front()
的情况下,很可能会返回对已分配内存前端的有效引用,但是您将输出仍存在于该内存位置但在技术上过时且过时的旧数据。无效。但是,对于back()
,它不能返回对任何有效内存的引用,因此从其中输出的数据是不确定的。