1.使用erase进行删除
问题:
std::vector<int> vNum;
int nChkNum;
...
for (std::vector<int>::iterator iter = vNum.begin(); iter != vNum.end(); iter++)
{
if(nChkNum == (*iter))
vNum.erase(iter);
}
(1)erase有两种原型,删除一个节点和区段删除,对于vector和list,这个操作的定义都是相同的。
(2)函数返回的iterator,是指向下一个有效的节点(如果没有指向end),所以在for循环中不能再调用 iter++,不然这样就等同于”iter += 2″。
(3)调用vector/list::erase(iterator iter)之后,it指向一个被销毁的值,再调用iter++,就会内存异常.
正确处理举例:
std::vector<int> vNum;
int nChkNum;
...
for (std::vector<int>::iterator iter = vNum.begin(); iter != vNum.end();)
{
if(nChkNum == (*iter))
iter = vNum.erase(iter);
else
iter++;
}