list容器中删除元素分如下两种情形,第一种是很大条地使用remove函数输入list的头部iterator和尾部iterator,如下代码
list<int> ilist;
ilist.push_back(1);
ilist.push_back(2);
remove(ilist.begin(),ilist.end(),1);//删除整个list中值为1的字节点
上面这个程序不需要用户参与,属于比较高层次的编程。第二种删除的情况是用户通过迭代器遍历容器的元素,然后通过迭代器删除容器中元素,举例如下:
list<int>::iterator iter=ilist.begin();
while(iter!=ilist.end())
{
if(*iter==1)
{
ilist.erase(iter);
}
iter++;
}
这个之后就会出现问题了,因为erase函数已经使得当前的节点失效了,所以当前节点的迭代器也会失效,因此再对这个迭代器操作(iter++)就会产生错误了,可以通过一下方式来解决这个问题:
list<int>::iterator iter=ilist.begin();
list<int>::iterator iter_tmp;
while(iter!=ilist.end())
{
if(iter==1)
{
iter_tmp=iter;
iter++;
ilist.erase(tmp);
}
else
{
iter++;
}
}