标签:
STL容器迭代器存在失效的情况,需要了解STL容器的实现方式,才能理解那种迭代器在何种情况下会失效。
std::vector<std::int> iter = m_vResult.begin(); for(; iter !=m_vResult.end(); iter++){ if(*iter == 0){ m_vResult.erase(iter); //iter被删除后就失效了。iter++动作是未定义 } }
正确写法如下
std::vector<std::int> iter = m_vResult.begin();
while(iter !=m_vResult.end()){
if(*iter == 0){
m_vResult.erase(iter++);
}
else{
iter++;
}
}
或者
std::vector<std::int> iter = m_vResult.begin();
while(iter !=m_vResult.end()){
if(*iter == 0){
iter = m_vResult.erase(iter);
}
else{
iter++;
}
}
标签:
原文地址:http://www.cnblogs.com/sparkles/p/4424967.html