使用std::vector::erase()方法删除容器内元素的时候,一定要按照格式进行书写,不能自己进行简化。
正确格式:
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); )
{
if( *iter == 3)
iter = veci.erase(iter);
else
iter ++ ;
}
错误格式:
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); iter++)
{
if( *iter == 3)
iter = veci.erase(iter);
}
这么写会让iter在第一次遍历后变为野指针,所以程序就会直接报“段错误【核心已转储】”的错误,所以千万不要省事,要按照格式写,否则就会花上你额外的精力去找bug。在这里分享出来,希望小伙伴们能够避免此类错误~