所以,我得到了我的类中的梅索德,什么这个类是应该做的是,检查我在.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
希望你能帮助我,因为我很丢失
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)