关于迭代器失效的疑惑,该如何解决

关于迭代器失效的疑惑
C/C++ code

int ia[]={0,1,1,2,3,5,8,13,21,55,89};  
vector<int> ivec(ia,ia+11);  
list<int> ilist(ia,ia+11); 
 
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)  
    {  
        if(*iter%2==0)  
        {  
            iter=ivec.erase(iter);  
            --iter;           //VS2010加上这句就出错    
        }  
    }  

for(list<int>::iterator iter=ilist.begin();iter!=ilist.end();++iter)  
    {  
        if(*iter%2!=0)  
        {  
            iter=ilist.erase(iter);  
            --iter;   //这里可以理解,往前移动一个元素,for循环之后++iter就指向被删除元素后面那个元素了
        }  
    }  


有个地方想不明白,为什么vector<int>容器删除元素后iter=ivec.erase(iter);  
迭代器不是已经指向被删除元素之后的元素了吗,如果没有--iter,那for循环的++iter就指向再往后的一个元素了.被删除元素后面那个元素不是被漏掉了吗?

为什么list<int)容器同样删除元素后--iter又不会出错了? 
非常感谢 请教各位大哥指点一下

------解决方案--------------------
要删除vector中的元素的标准写法:
C/C++ code

for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();/*++iter*/)  
{  
        if(*iter%2==0)  
        {  
            iter=ivec.erase(iter);  
            //--iter;           //VS2010加上这句就出错    
        }
        else
        {
            ++iter;
        }
}

------解决方案--------------------
C/C++ code

  if(*iter%2==0)  
        {  
            iter=ivec.erase(iter);  
            --iter;           //VS2010加上这句就出错    
        }

------解决方案--------------------
An iterator that designates the first element remaining beyond any elements removed, or a pointer to the end of the vector if no such element exists.

你删除第一个元素的时候,返回的指针指向了begin,你再减就没有地方退了。
------解决方案--------------------
探讨

加上--iter的话会出现这个错误

------解决方案--------------------
你在看c++primer吧。。呵呵。。。我也在看。。我两貌似看得一样快啊。。。你跟我碰到了一样的问题。。。。就是{0,1,1,2,3,5,8,13,21,55,89}; 第一个是0满足if(*iter%2==0)。。然后被删掉。。。此时迭代器就指向了最后一个元素。。再往后退的话,就是未定义。。。

我有C++primer的答案,,你要吗?我qq657974959.。。。