STL容器迭代器存在失效的状况,须要了解STL容器的实现方式,才能理解那种迭代器在何种状况下会失效。spa
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++; } }
或者code
std::vector<std::int> iter = m_vResult.begin(); while(iter !=m_vResult.end()){ if(*iter == 0){ iter = m_vResult.erase(iter); } else{ iter++; } }