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

string门类对象erase操作迭代器不失效

2013-10-02 
string类型对象erase操作迭代器不失效?string str this IS A Examplevectorchar cvec(str.begin(),

string类型对象erase操作迭代器不失效?

        string str = "this IS A Example";
vector<char> cvec(str.begin(), str.end()); 

for(vector<char>::iterator iter = cvec.begin(); iter!= cvec.end(); ++iter){
if (isupper(*iter)){
cvec.erase(iter);//这里很迷惑 求达人帮助
--iter;
}
}
return 0;


[解决办法]
erase 返回删除后新区间的其实迭代器,赋值给 iter 了以后当然就不会再失效了。
[解决办法]
vector底层是连续内存,迭代器实际就是指针。

你1楼的写法虽说表面上看错误,实际运行时毫无问题的,因为你erase一个元素后,后面的内存会向前拷贝,也就是当前位置被填充为下一个元素,你先--iter,退到前一个位置,然后for的++又回到当前位置,所以是不会遗漏任何元素的,访问是正常的。

热点排行