C++容器,这能操作不能删除list中的奇数?

用一个int数组ia初始化了一个list<int>,要求在list里边删除奇数,下面的代码:intia[]={0,1,1,2,3,5,8,13,21,55,89};//数... 用一个int数组ia初始化了一个list<int> ,要求在list里边删除奇数,下面的代码:
int ia[] = {0,1,1,2,3,5,8,13,21,55,89};//数组ia
size_t size = sizeof(ia)/sizeof(ia[0]);//数组长度计算
list<int> il(ia,ia+size);//初始化list
for(list<int>::iterator i = il.begin();i!=il.end();++i){//删除奇数
if((*i)%2 != 0 ){//条件改成(*i)%2 == 1 也不行
il.erase(i);
}
}
同样的逻辑在vector可以实现删除偶数,却不能删除list
哪位大神帮看看啊
展开
 我来答
于争天
2015-06-04 · 超过35用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:51.8万
展开全部
int ia[] = {0,1,1,2,3,5,8,13,21,55,89};//数组ia
 size_t size = sizeof(ia)/sizeof(ia[0]);//数组长度计算
 list<int> il(ia,ia+size);//初始化list
 for(list<int>::iterator i = il.begin();i!=il.end();){//删除奇数
 if((*i)%2 == 0 )
 {//条件改成(*i)%2 == 1 也不行
 i=il.erase(i);
 }
 else
 {
 i++;
 }
 } 
 copy(il.begin(),il.end(),ostream_iterator<int>(cout," ");

这样改一下就可以了,使用迭代器时要注意迭代器失效的情况,对于链表的迭代器,调用erase成员函数时,迭代器i将会失效,但是对于vector的迭代器调用erase时,迭代器不会失效,之所以会这样,因为他们的内存分配不同,list每个节点采用动态内存分配,而verctor采用连续地址块分配,ps:vector的迭代器是原生指针,链表的不是,可以看看stl源码剖析这本书上讲的

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式