returns 来自布尔向量的索引的 int 函数

int function that returns an index from a vector of bools

我有以下功能:

int FamiliesController::returnFamilySelected(){

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

    if ( isFamilyChosenController[i] == true){

            return i;
        }   
    }
}

这个函数 return 是一组布尔值的索引,当其中一个为真时,它 return 是它在向量中的索引,非常简单。我现在遇到的问题是,当所有布尔值都为假时。函数 return 是一个奇怪的数字 -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;
     }   
    }
}

它总是return -1。因为如果只有一个元素为真并不重要,一旦它在向量中传递那个布尔值,它将立即 return 为假,因为下一个为假。我需要让已经成为真的那个的索引总是 returned.

有没有告诉它的例子(伪代码):

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


}

请注意,我没有使用 c++ 11。

谢谢!

只需将 return -1 放在循环之后即可。其中一个值满足您的条件,您 return 它的索引,否则循环结束,您 return -1.

也就是说,在 C++ 中执行此操作的惯用方法是使用 std::find

你的问题是,如果找不到匹配项,你就不会return任何事情

一个好的编译器至少会警告你这一点

int FamiliesController::returnFamilySelected(){

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

    if ( isFamilyChosenController[i] == true){

            return i;
        }   
    }
}
// now what?????

你需要return一个标记值才能说'not found'

int FamiliesController::returnFamilySelected(){

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

    if ( isFamilyChosenController[i] == true){

            return i;
        }   
    }
}
return -1; // not found

或者你可以扔

好吧,只有当向量的第一个元素为真时,您的代码才会按预期工作。相反,你可以试试这个:

int FamiliesController::returnFamilySelected(){

int index = -1;

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

        if ( isFamilyChosenController[i] == true){

            index = i;
            break;
        }
    }
    return index;
}