读书人

!list 使用erase时候报错了

发布时间: 2013-08-16 14:29:57 作者: rapoo

求助!list 使用erase时候报错了
小弟想list中的元素使用后立即删除,但是不幸报错:list erase iterator outside range
难道是我迭代器超出范围了,于是我调试看了,list中还是有数据的,而且迭代器也没有越界
!list 使用erase时候报错了
上面图片可以看出,原本有三个元素,第一个元素刚好被擦除。擦除后还剩下两个元素。
看了一下,那个错误时那里打印出的,在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()
一下子还真没看出问题在哪里

读书人网 >C++

热点推荐