vendredi 28 mars 2014

Vector iterator erase giving me a runtime error?


Vote count:

0




So I got a methode inside my class, and what this class is supposed to do is, check if the vector i have in the .h file have values bewtween double low & double high and then delete those and at last return how many "spaces" got removed


So I tried a few things and i always get runtime errors, it seems to be in the for loop, but i can´t figure out why.


Here is what i tried,


First I tried to just do it the way I felt like it would work:



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;
}


But then I tried to do some debugging and I could see that it actually doesn´t make sence to have it like that as when something gets deleted i still get incremented(so if we delete "space 2" it would actually check space 4 next time(as spot 3 get to be spot 2 after erase)))


So I tried to change it to this



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;
}


Where it only increment the i whenever i do not remove a space(so if I delete "space 2", it will check the new "space 2" next run)


This also gives me a syntax error expression: vector iterators incompatible


Hope you can help because I'm pretty lost



asked 1 min ago






Aucun commentaire:

Enregistrer un commentaire