猿问

为什么我删除向量最后一个元素的时候程序会崩溃,删除第一个就没事?

c++向量删除问题void Station::Delete()
{
int a;
string s;
while(1)
{
cin>>s>>a;
for(Svit=Sv.begin();Svit!=Sv.end();Svit++)
if(Svit->getstation()==s)
{
if(Svit==Sv.end()-1)
Sv.pop_back();
else
Sv.erase(Svit);
}
if(a==0)
break;
}
}
请问向量中有两个元素,为什么我删除向量最后一个元素的时候程序会崩溃,删除第一个的时候没事。

肥皂起泡泡
浏览 143回答 2
2回答

繁花如伊

erase不是这么用的。erase的参数是最后的迭代器。所以要vector删除要先remove再erase。

泛舟湖上清波郎朗

尽量避免在for循环中多次使用erase,使用erase之后指针Svit指向的那个元素已经被删除了,其后的元素结构也发生了变化,Svit++成了一个未定义行为。如果要在循环中使用erase,正确的写法应该是:for(Svit=Sv.begin();Svit!=Sv.end();){    if(Svit->getstation()==s)        Svit=erase(Svit);    else        Svit++;}
随时随地看视频慕课网APP
我要回答