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;
}
我有以下功能:
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;
}