您的位置:首页 > 其它

STL中list,遍历删除元素注意事项

2013-07-09 14:53 459 查看
void DeleteListElem()
{
std::list<int> intlist;

for(int i=0;i<10;i++)
{
intlist.push_back(i);
}

std::list<int>::iterator  ite1;
std::list<int>::iterator  ite2;

for(ite1 = intlist.begin();ite1 != intlist.end();	)
{
if(4 == *ite1)//要删除4这个元素
{
ite2 = ite1;//需要先保留要删除元素的指针;
ite1++;		//然后原指针++,这样做的目的是防止链表断链
intlist.erase(ite2);//删除
printf("删除成功\r\n");
}
else
{
ite1++;
}
}

//采用下面过程将会出现	list iterator not incrementable 错误
/*
for(ite1 = intlist.begin();ite1 != intlist.end();ite1++)
{
if(4 == *ite1)//要删除4这个元素
{
//删除前 itel : [ptr] = 0x002fc168 {4}
intlist.erase(ite1);
//删除后 item :[ptr] = 0x002fc168 {-17891602},可见指针已经指向不确定的元素

//这里执行完之后,ite1指针会悬空,当执行到for语句中item++操作时会报错
}
}
*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: