int函数,用于从bool向量返回索引

时间:2015-01-27 17:44:24

标签: c++ for-loop vector

我有以下功能:

int FamiliesController::returnFamilySelected(){

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

    if ( isFamilyChosenController[i] == true){

            return i;
        }   
    }
}

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

它将始终返回-1。因为如果只有一个元素为真并不重要,一旦它在向量中传递了那个bool,它就会立即返回false,因为下一个元素是假的。我需要将已经变为真的那个的索引总是返回。

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

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。

谢谢!

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

你的问题是,如果你没找到匹配,你就不会返回任何东西

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

int FamiliesController::returnFamilySelected(){

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

    if ( isFamilyChosenController[i] == true){

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

您需要返回一个标记值来表示“未找到”

int FamiliesController::returnFamilySelected(){

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

    if ( isFamilyChosenController[i] == true){

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

或者你可以抛出

答案 2 :(得分:1)

好吧,如果向量的第一个元素为true,则代码只能按预期工作。相反,你可以试试这个:

int FamiliesController::returnFamilySelected(){

int index = -1;

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

        if ( isFamilyChosenController[i] == true){

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