首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vector 的 erase 方法的行为不一致有关问题

2012-03-24 
vector 的 erase 方法的行为不一致问题昨天无意中发现这个C/C++ codevectorint vecintfor (int i0i5

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()函数有返回值的

热点排行