标签:
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