【问题标题】:Reset iterator in loop after erase擦除后在循环中重置迭代器
【发布时间】:2015-03-07 04:15:10
【问题描述】:

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

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

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

【问题讨论】:

  • This causes vEnd to equal the thing I just deleted 不,它没有。是什么让你产生了这个想法?
  • 我进入了一个调试器,它做到了
  • vbeginvBegin 之间的关系(如果有)是什么?
  • @randomname 在遍历向量时,您是否有理由不使用 erase/remove_if 习语而不是擦除? stackoverflow.com/questions/347441/…
  • This seems to work,也许你应该给我们看看真正的代码。

标签: c++ iterator


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试下面的方法

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 2014-09-17
      • 2011-09-17
      • 1970-01-01
      • 2019-08-23
      • 2021-01-02
      • 1970-01-01
      相关资源
      最近更新 更多