概述
set元素如果用迭代器遍历,一边遍历一边删除,会大大滴出问题。。遇到很多次了,于是查了一下资料,得到以下结论::
(´・Д・)」
//set删除元素的函数
s.erase(<#const_iterator __p#>);//用迭代器删除元素
s.erase(<#const key_type &__k#>);//用key删除元素
一些测试::
⬆️这个没问题
然鹅
⬆️这个有问题
⬆️这个也有问题
why???
原因是,当删除set中某个元素时,当前元素迭代器会失效,所以用key或者迭代器删除元素后,再令迭代器++这个操作是会有问题的。
所以,利用迭代器遍历元素并删除时的正确写法为:
for(it=s.begin();it!=s.end();){
int t=*it;
cout<<"t="<<t<<endl;
if(*it%2==1){
s.erase(it++);//删除所有的奇数,用迭代器删除,同时迭代器自增1
cout<<"删掉的t="<<t<<endl;
}
else{
++it;
}
}
“因为传入erase的是个it的副本,it++是下一个有效迭代器”
在传入erase的时候令it++,可以避免迭代器失效后产生的问题。
最后
以上就是体贴鱼为你收集整理的set中元素删除相关问题的全部内容,希望文章能够帮你解决set中元素删除相关问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复