迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。
void test_list_iterator()
{
list<int> ls;
ls.push_back(1);
ls.push_back(2);
ls.push_back(3);
ls.push_back(4);
ls.push_back(5);
list<int>::iterator it = ls.begin();
while(it != ls.end())
{
ls.erase(it); // erase()函数执行后,it所指向的节点已被删除,所以it失效
++it;
}
}

erase()函数执行后,it所指向的节点已被删除,因此it无效,在下一次使用it时,必须先给其赋值
std::list::erase
iterator erase (iterator position);
erase是有返回值的,所以需要接收一下返回值
void test_list_iterator()
{
list<int> ls;
ls.push_back(1);
ls.push_back(2);
ls.push_back(3);
ls.push_back(4);
ls.push_back(5);
list<int>::iterator it = ls.begin();
while(it != ls.end())
{
it = ls.erase(it);
}
}
在C++中,当使用迭代器对list进行删除操作时,erase()函数会导致迭代器失效。文章通过示例代码说明,在删除迭代器指向的节点后,应更新迭代器以避免后续使用中的错误。正确做法是将erase()的返回值赋给迭代器。
1977

被折叠的 条评论
为什么被折叠?



