list使用中遇到的erase问题(List Iterator Not Incrementable)在VS2005中使用list的erase遇到了"List Iterator Not Incrementable"问题 举个例子: 1. list<int> sList; sList.push_back(1); for (sP = sList.begin();sP!=sList.end();sP++) { if(*sP == 3) sP = sList.erase(sP); //清除后,自动指向下一个结点 } 如果恰好不是在3不是在sList的结尾,这个没有什么问题; 关键是,如果是在结尾,请看: 2. list<int> sList; 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();) 再测试,就没有问题了。 |
|