簡體   English   中英

find()和distance()的准確性如何

[英]how accurate is find() and distance()

我想我在返回迭代器位置時讀到了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-是最新的容器20。

我想出了一個既不使用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是精確的。 毫無疑問。

但是,您很可能會誤解其功能。 您說它可能會返回“錯誤位置”。 它永遠不會返回位置。 迭代器是一個位置。

另外,您可能需要檢查std::bitset<21> 當位數固定時,它更合適,並且具有額外的輔助函數,例如.reset()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM