vector 的 erase 方法的行为不一致问题
昨天无意中发现这个
- C/C++ code
vector<int> vecint;for (int i=0;i<5;i++){ vecint.push_back(i);}vector<int>::iterator itr = vecint.begin();vector<int>::iterator itrtemp;while ( itr!=vecint.end()){ itrtemp = itr++; if (*itrtemp == 4) { vecint.erase(itrtemp); //*itrtemp == 2, itr 4 //*itrtemp == 3, itr 4 //*itrtemp == 4, crash cout<<"itr "<<*itr<<endl; } } *itrtemp == 2, *itrtemp == 4的行为比较好理解
*itrtemp == 3的结果,理解不能
行为不一致
[解决办法]
erase之后,所有后面的元素都会往前移动。
[解决办法]
那么你知道删除会引起迭代器失效的问题么
[解决办法]
迭代器失效~
[解决办法]
vecint.erase()函数有返回值的