矢量迭代器擦除给我一个运行时错误?

Sum*_*812 1 c++ vector

所以,我得到了我的类中的梅索德,什么这个类是应该做的是,检查我在.h文件中的矢量具有值bewtween double low&double high然后删除这些,最后返回多少"空间"是怎样才取出

所以我尝试了一些东西,我总是得到运行时错误,它似乎在for循环中,但我无法弄清楚为什么.

这是我试过的,

首先,我尝试按照我认为可行的方式进行操作:

int datastorage::eraseDataPointsBetween(double low,double high) 
{
    int antal = 0;
    for (vector<double>::iterator i = data_.begin(); i !=data_.end();i++)
    {
        if (*i >=low && *i <=high)
        {
            data_.erase(i);
            antal++;
        }

    }
    return antal;
}
Run Code Online (Sandbox Code Playgroud)

但后来我尝试做一些调试,我可以看到它实际上没有让它像那样,当某些东西被删除它仍然会增加(所以如果我们删除"空间2"它实际上将检查空间4下一步时间(因为现场3在擦除后成为现场2)))

所以我试着改变它

int datastorage::eraseDataPointsBetween(double low,double high) 
{
    int antal = 0;
    for (vector<double>::iterator i = data_.begin(); i !=data_.end();)
    {
        if (*i >=low && *i <=high)
        {
            data_.erase(i);
            antal++;
        }
        else 
            i++;
    }
    return antal;
}
Run Code Online (Sandbox Code Playgroud)

只有i当我不删除空格时它才会增加(所以如果我删除"空格2",它将检查新的"空格2"下一次运行)

这也给我一个语法错误 expression: vector iterators incompatible

希望你能帮助我,因为我很丢失

4pi*_*ie0 5

vector::erase使迭代器无效,因此在调用擦除后不能使用它.你应该这样擦除vector:

int datastorage::eraseDataPointsBetween( double low, double high)  {
  int antal = 0;
  for( vector<double>::iterator i = data_.begin(); i !=data_.end())
  {  
     if( (*i >= low) && (*i <= high))
     {
        i = data_.erase( i); // new (valid) iterator is returned
        ++antal;
     }
     else
     {
        ++i;
     }

   return antal;
}
Run Code Online (Sandbox Code Playgroud)