解释这个关于c++容器删除的程序,为什么输不出结果了,在gnu能编译 ,而在vc里有错误

来源:百度知道 编辑:UC知道 时间:2024/05/08 14:11:19
#include<iostream>
#include<vector>
#include<list>
#include<conio.h>
using namespace std;
int main()
{
int ia[]={1,2,3,4,5,6,7,8,9,0};
vector<int> iv(ia,ia+10);
list<int> ilst(ia,ia+10);
for(vector<int>::iterator it=iv.begin();it!=iv.end();it++)
{if(*it%2==0)it=iv.erase(it);it--;}

for(vector<int>::iterator it=iv.begin();it!=iv.end();it++)
cout<<*it<<ends;

for(list<int>::iterator it=ilst.begin();it!=ilst.end();it++)
{if(*it%2!=0)it=ilst.erase(it);it--;}

for(list<int>::iterator it=ilst.begin();it!=ilst.end();it++)
cout<<*it<<ends;
getch();
}

for(vector<int>::iterator it=iv.begin();it!=iv.end();it++)
{if(*it%2==0)it=iv.erase(it);it--;}
改成
for(vector<int>::iterator it=iv.begin();it!=iv.end();it++)
{
if(*it%2==0)
{
it=iv.erase(it);
it--;//删除了才减的
}
}
后面这个
第一次循环就把1删除了,it指向2(2这个时候是第一个元素)
你再对it--;会跑出异常的