vector和map使用erase删除元素

注意的原因:对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代器就失效了,不应该再被使用;否则会导致程序无定义的行为。

错误;

//vector
vector <int>::iterator iter;
for (iter=vecInt.begin(); iter!=vecInt.end(); iter++)
{
    vecInt.erase(iter);
}
//map
for(ITER iter=mapTest.begin();iter!=mapTest.end();++iter)  
{  
    mapTest.erase(iter);  
}  

正确写法vector:

vector <int>::iterator iter;
//第一种
for (iter=vecInt.begin(); iter!=vecInt.end();)
{
    iter = vecInt.erase(iter);
}
//第二种
for (iter=vecInt.begin(); iter!=vecInt.end();)
{
    vecInt.erase(iter++);
}

正确写法map:

//第一种
for(ITER iter=mapTest.begin();iter!=mapTest.end();) //注意此处不能再写iter++  
{
    mapTest.erase(iter++);  
}  
//第二种
for(ITER iter=mapTest.begin();iter!=mapTest.end();)  
{  
    iter=mapTest.erase(iter);  //erase() 成员函数返回下一个元素的迭代器  
}  

 

posted on 2018-03-19 11:34  GnibChen  阅读(310)  评论(0编辑  收藏  举报