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
哪位大神帮看看啊 展开
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
哪位大神帮看看啊 展开
1个回答
展开全部
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源码剖析这本书上讲的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询