擦除后在循环中重置迭代器

时间:2015-03-07 04:15:10

标签: c++ iterator

我正在尝试通过转移

来重置迭代器
while (vBegin != vEnd)
{ 
    //some stuff; 
    vectorThing.erase(vbegin); 
    vbegin = vectorThing.begin();
    vEnd = vectorThing.end();
}

这导致vEnd等于我刚刚删除的东西,我怎样才能让它像以前一样指向最终?

2 个答案:

答案 0 :(得分:0)

你知道你的容器是否是空的吗?如果是,则end()函数返回与vector :: begin()相同的迭代器值。也许这就是你所看到的? 例如,如果您的容器大小为1并且您刚删除了第一个元素,那么您将会遇到相同的开始和结束元素。

答案 1 :(得分:0)

尝试以下方式

while ( vBegin != vectorThing.end() )
{ 
    //some stuff; 
    vBegin = vectorThing.erase(vbegin); 
}

while ( vBegin != vEnd )
{ 
    //some stuff; 
    vBegin = vectorThing.erase(vbegin); 
    vEnd = vectorThing.end(); 
}