我是靠谱客的博主 体贴鱼,最近开发中收集的这篇文章主要介绍set中元素删除相关问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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中元素删除相关问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部