STL的list的erase问题
2013-05-26 16:58
162 查看
http://www.cnblogs.com/carekee/articles/1717921.html
list使用中遇到的erase问题(List Iterator Not Incrementable)
在VS2005中使用list的erase遇到了"List Iterator Not Incrementable"问题举个例子:
1.
list<int> sList;
list<int>::iterator sP;
sList.push_back(1);
sList.push_back(3);
sList.push_back(5);
sList.push_back(7);
for (sP = sList.begin();sP!=sList.end();sP++)
{
if(*sP == 3)
sP = sList.erase(sP); //清除后,自动指向下一个结点
}
如果恰好不是在3不是在sList的结尾,这个没有什么问题;
关键是,如果是在结尾,请看:
2.
list<int> sList;
list<int>::iterator sP;
sList.push_back(3);
for (sP = sList.begin();sP!=sList.end();sP++)
{
if(*sP == 3)
sP = sList.erase(sP); //sP得值为负值
}
这样因为最后会再次执行一次循环,操作sP++,这时就会报错,因为此时sP已经无指向;
预防这种错误,如网上说的:
在执行sP = sList.erase(sP); //sP得值为负值
后面加入 sP--;更会出错;
最后的解决办法:
sList.push_back(3);
for (sP = sList.begin();sP!=sList.end();)
{
if (*sP == 3)
{
sP = sList.erase(sP); //sP指向下一个,如果sP当前指向为end的前一个,那执行完后,指向end
}
else
{
sP++; //如果上面没有执行,sP指向下一个
}
}
再测试,就没有问题了。
相关文章推荐
- 关于STL的list,vector等用迭代器iterator,用erase删除元素出现的问题。
- 关于STL的list,vector等用迭代器iterator,用erase删除元素出现的问题。
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- STL删除vector或list的方法及注意的问题
- 关于STL的erase()陷阱-迭代器失效问题的总结
- list.erase导致迭代器失效问题
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- STL里list、vector、queue性能差异与疑似内存泄漏问题
- C++STL中对vector进行erase删除元素操作中遇到的问题。
- C++中list的erase()函数问题
- [STL]list的erase正确与错误用法
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- STL list erase 删除一个节点后,迭代器会失效吗
- DLL中传递STL参数(如Vector或者list等)会遇到的问题[转载]
- STL中的List排序问题
- 关于STL erase的iterator失效问题
- STL-有关list元素为结构体,而按其中一元素排序问题
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- C++/STL用erase删除元素(vector,deque),(list,set,map)