从布尔向量返回索引的int函数

mau*_*hez 0 c++ for-loop vector

我有以下功能:

int FamiliesController::returnFamilySelected(){

for ( int i = 0; i < isFamilyCoosenController.size(); i++){

    if ( isFamilyChosenController[i] == true){

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

此函数返回一组布尔值的索引,当其中一个为true时,它非常直接地返回其在向量中的索引。我现在遇到的问题是,当所有布尔值都为假时。该函数返回一个怪异的数字-1029384。如果我将它们进行如下比较:

int FamiliesController::returnFamilySelected(){

for ( int i = 0; i < isFamilyChosenController.size(); i++){

    if ( isFamilyChosenController[i] == true){

            return i;
        }else if ( is FamilyIsChosenController[i] == false){
            return - 1;
     }   
    }
}
Run Code Online (Sandbox Code Playgroud)

它将始终返回-1。因为只有一个元素为真并不重要,所以一旦它在向量中传递了布尔值,它将立即返回false,因为下一个元素为false。我需要始终返回的已变为true的索引。

无论如何有没有要举例说明(伪代码):

for ( int i = 0; i < isFamilyChosenController.size(); i++){// we check in our vector of booleans

   if ( One boolean == true ){

       return the index of that boolean;

   }else if ( all the booleans == false ){

     return -1; // a number that is out of the container size but I can manipualte


}
Run Code Online (Sandbox Code Playgroud)

让我们在这里注意,我没有使用c ++ 11。

谢谢!

Jon*_*Jon 5

只需return -1在循环之后放。值之一满足您的条件,然后返回其索引,否则循环结束并返回-1。

就是说,在C ++中惯用的方式是使用std::find

  • 同样,如果您的程序到达非void函数的结尾(这就是为什么您得到那个奇怪的数字),它也是未定义的行为。 (2认同)
  • @mauricioSanchez:`std :: find`返回一个迭代器到匹配的项目。然后,您可以`return std :: distance(isFamily.begin(),return_value)`将其转换为索引。在这种情况下,实际上,迭代器将是一个指针,而`std :: distance`将进行指针减法,但请注意,这不能保证(并非对所有类型的容器都适用)。 (2认同)