求助!list 使用erase时候报错了
小弟想list中的元素使用后立即删除,但是不幸报错:list erase iterator outside range
难道是我迭代器超出范围了,于是我调试看了,list中还是有数据的,而且迭代器也没有越界
上面图片可以看出,原本有三个元素,第一个元素刚好被擦除。擦除后还剩下两个元素。
看了一下,那个错误时那里打印出的,在erase函数里面:
iterator erase(const_iterator _Where)
{// erase element at _Where
#if _HAS_ITERATOR_DEBUGGING
if (_Where._Mycont != this || _Where._Ptr == _Myhead)
_DEBUG_ERROR("list erase iterator outside range");
_Nodeptr _Pnode = (_Where++)._Mynode();
_Orphan_ptr(*this, _Pnode);
对那个if语句是怎么回事深深不解,难道是迭代器指向begin的时候不能擦除吗?各位大牛们,请为小弟解惑吧!又该如何修改? Iterator debugging
[解决办法]
把那三行改成
Iterator_USERID = m_list_GPS_USERID.erase( Iterator_USERID );
[解决办法]
_Myhead 并不是第1个元素,而是list的第0个元素/第n+1个元素
list的实现通常是一个循环链表,开始点和结束点是_Myhead
你看下begin()的代码就知道了,第一个元素时_Myhead的下一个元素,end()则是直接返回_Myhead的位置
[解决办法]
删除前也判断了迭代器是否到了end()
一下子还真没看出问题在哪里