首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

!list 使用erase时候报错了

2013-08-16 
求助!list 使用erase时候报错了小弟想list中的元素使用后立即删除,但是不幸报错:list erase iterator outs

求助!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()
一下子还真没看出问题在哪里

热点排行