我认为我在某处读取distance()
时返回的迭代器位置可能会很挑剔。有时它不会返回正确的位置。我想知道这是否属实,或者我没有正确使用它。find()和distance()的精确程度如何?
我试图找出21向量中的某个粒子是否被徘徊。这个想法是一旦徘徊就改变别人的状态。
我使用find()
来知道粒子何时悬空,因此属实。
vector<bool>::iterator it;
it = find(_tmp->isParticleHovered.begin(), _tmp->isParticleHovered.end(), true);
if (it != _tmp->isParticleHovered.end()){// we look if a particle is being hovered.
isHovered = true;// we use this to check internally the first boid
}else{
isHovered = false;
}
现在我也想不仅知道什么时候有人徘徊,但其中一人徘徊,所以我说这一点:
vector<bool>::iterator it;
it = find(_tmp->isParticleHovered.begin(), _tmp->isParticleHovered.end(), true);
if (it != _tmp->isParticleHovered.end()){// we look if a particle is being hovered.
l = distance(_tmp->isParticleHovered.begin(), it);
isHovered = true;// we use this to check internally the first boid
}else{
isHovered = false;
l = -1;
}
因此,了解指数,我想切换他人的状态所以我想出了以下情况:
if (l == -1){
if (boidState5){
resetFamilyBoidState(_tmp);// makes all the particles go back to the same state
boidState2 = true;
boidState5 = false;
}
}else if (l != -1){
if (boidState2){
makeBoidStateless(_tmp, l);// I pass L, to this function, tell the function to switch all the particles to a different state except the one that is being hovered.
boidState5 = true;
boidState2 = false;
}
}
它将为几次工作但是当我将从粒子快速悬停到粒子时,它会变得混乱,有时l
将返回21,这将使粒子矢量大小为21,从而导致它崩溃 - 是最新的容器。
我想出了一个解决方案,而无需使用既不find()
也不distance()
:
int FamiliesController::returnInfoBoxState(){
for (int i = 0; i < boidList.size(); i++){
if (boidList[i]->boidState == 2){
return i;
}
}
return -1;
}
在我创建了一个将返回我,当该特定状态被称为指数函数控制器类,否则它会返回-1。使用相同的if语句,它工作正常。
我很想找到关于find()
和distance()
的信息。任何澄清非常感谢。
'std :: distance()'不是“finicky”。也许你在代码中做错了你没有向我们展示的东西(例如,'l'的声明类型是什么,顺便说一下,它是一个可怕的变量名,因为它看起来像'1')。如果您发布完整的演示该问题的工作程序,这将会很有帮助。 – 2015-02-06 05:39:40
@JohnZwinck我相当确定的是这种情况。我的应用程序变得越来越大,很难跟踪事情。这就是为什么我很难发布能够证明整个问题的东西。 – mauricioSanchez 2015-02-06 16:10:52