我有以下功能:
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。
谢谢!
答案 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;
}