印度网站后缀,优化神马网站关键词排名价格,WordPress鼠标悬停效果,嘉定区网站建设目录
一、list iterator的使用
二、list的迭代器失效 一、list iterator的使用 对于list的迭代器的用法#xff0c;可以将它看做一个指针#xff08;实际要更加复杂#xff09;来使用#xff0c;该指针指向list中的一个节点。 【注意】 (1)begin和end为正向迭代器#x…目录
一、list iterator的使用
二、list的迭代器失效 一、list iterator的使用 对于list的迭代器的用法可以将它看做一个指针实际要更加复杂来使用该指针指向list中的一个节点。 【注意】 (1)begin和end为正向迭代器对迭代器执行操作迭代器向后移动 (2)rbegin和rend是反向迭代器对迭代器执行操作迭代器向前移动 二、list的迭代器失效 list的迭代器失效即迭代器所指向的节点被删除掉了。list是带哨兵位头节点的双向循环链表在list中进行插入节点不会导致list的迭代器失效只有删除节点时才会出现失效问题并且失效的只是指向被删除节点的迭代器其他迭代器不受影响。
//list迭代器失效测试案例
void Test1()
{int arr[] { 1,2,3,4,5,6,7,8,9 };listint l(arr, arr sizeof(arr) / sizeof(arr[0]));listint::iterator it l.begin();cout *it endl;while (it ! l.end()){l.erase(it); it; //erase()函数执行后it所指向的节点已被删除导致it失效所以不能再对it进行操作}
} 上面测试代码调试触发异常cannot increment value-initialized list iterator即迭代器失效 list.erase()的返回值是指向带删除节点的下一个节点的迭代器所以为避免迭代器失效针对上述测试代码可以做以下修改
void Test2()
{int arr[] { 1,2,3,4,5,6,7,8,9 };listint l(arr, arr sizeof(arr) / sizeof(arr[0]));listint::iterator it l.begin();while (it ! l.end()){cout *it endl;l.erase(it); //等价于itl.erase(it) 即用it来接收指向下一个节点的迭代器//erase()返回的是指向待删除节点的下一个节点的迭代器}
}