擦除后循环重置迭代器

Reset iterator in loop after erase

本文关键字:迭代器 循环 擦除      更新时间:2023-10-16

我正在尝试重置迭代器,因为它已被擦除

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

这导致 vEnd 等于我刚刚删除的内容,我如何让它像以前一样指向最后?

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

尝试以下方式

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

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