C++ 擦除后重置循环中的迭代器
我正在尝试重置迭代器,因为它已被删除C++ 擦除后重置循环中的迭代器,c++,iterator,C++,Iterator,我正在尝试重置迭代器,因为它已被删除 while (vBegin != vEnd) { //some stuff; vectorThing.erase(vbegin); vbegin = vectorThing.begin(); vEnd = vectorThing.end(); } 这会导致vEnd等于我刚才删除的内容,如何使它像以前一样指向末尾?您知道您的容器是否为空吗?如果是,则end()函数返回与vector::begin()相同的迭代器值。也许这
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);
}
或
这导致vEnd等于我刚才删除的内容
不,它不等于。是什么让你产生了这个想法?我进入了一个调试器,调试器做到了,vbegin
和vbegin
之间的关系是什么?@randomname你为什么不在向量上迭代时使用erase/remove\u if
习惯用法而不是擦除,也许你应该给我们看看真正的代码。
while ( vBegin != vEnd )
{
//some stuff;
vBegin = vectorThing.erase(vbegin);
vEnd = vectorThing.end();
}