大家给小弟我看看这个vector和list元素删除代码有关问题在哪儿

大家给我看看这个vector和list元素删除代码问题在哪儿
这个还是练习题答案的代码,我一编译有错误,题目是复制一个长度为11的数组分别到vector容器和list容器,然后用erase删除vctor里面的偶数,list里面的奇数,结果它的标准答案有问题,我知道问题在第二个for循环里面,第一个for循环和第二个for循环执行一样,voctor容器就能正确执行,而list容器就报溢出错误呢?如果把第二个for循环注销掉,程序就没有问题
帮我看下问题所在啊,为什么会这样

void main(){
const int N=11;
int a[N];
vector<int> ivec;
list<int> ilist;
for(int ix=0;ix!=N;++ix){
cin>>a[ix];
ivec.push_back(a[ix]);
ilist.push_back(a[ix]);
}
vector<int>::iterator viter=ivec.begin();
list<int>::iterator liter=ilist.begin();
for(;viter!=ivec.end();++viter)
    if(*viter%2==0){
viter=ivec.erase(viter);
--viter;
}
for(;liter!=ilist.end();++liter)//这段有问题
if(*liter%2!=0){            //
liter=ilist.erase(liter);//
--liter;                 //
}                            //
cout<<endl;
viter=ivec.begin();
liter=ilist.begin();
for(;viter!=ivec.end();++viter)
cout<<*viter<<' ';
cout<<endl;
for(;liter!=ilist.end();++liter)
cout<<*liter<<' ';
system("pause");
}

------解决方案--------------------

#include <vector>
#include <list>
#include <iostream>

using namespace std;

void main()
{
const int N=11;
int a[N];
vector<int> ivec;
list<int> ilist;
for(int ix=0; ix!=N; ++ix)
{
cin>>a[ix];
ivec.push_back(a[ix]);
ilist.push_back(a[ix]);
}
vector<int>::iterator viter=ivec.begin();
list<int>::iterator liter=ilist.begin();
for(; viter!=ivec.end(); ++viter)
if(*viter%2==0)
{
viter=ivec.erase(viter);
if(viter != ivec.begin())
--viter;
}
for(; liter!=ilist.end(); ++liter) //这段有问题
if(*liter%2!=0)  //
{
liter=ilist.erase(liter);//