C++退出双层for循环,解决break、return、continue⽆法实现问
遇到⼀个情景,采⽤双层for循环遍历图像的像素,当到某⼀个像素点满⾜条件时,退出双层for 循环。
⾸先了解⼀下 continue、break、return 各⾃功能⽤法:
终⽌本次循环的执⾏,即跳过当前⼀次循环中continue语句后尚未执⾏的语句,然后进⾏下⼀次循环条件的判断。
2.break 语句的作⽤
(1)当break在循环体内时,强⾏终⽌整个循环的执⾏,即结束整个循环过程,不再判断执⾏循环的条件是否成⽴,直接转向循环体下⾯的语句。
(2)当break出现在循环体中的switch语句体内时,其作⽤只是跳出该switch语句体。
'break' ⽤在循环语句块中, 只要执⾏到break语句, Matlab就会退出该循环, 但是它只能退出⼀层循环, 假
continue语句执行过程如现在有内外两层循环, 在内层循环中执⾏break只会退出内层的循环.
break常和判断语句⼀起是使⽤.
( 1 ) return 从当前的⽅法中退出,返回到调⽤该⽅法的语句处,继续向下执⾏。
( 2 ) return 返回⼀个值给调⽤该⽅法的语句,返回值的数据类型必须与⽅法的声明中的返回值的类型⼀致。
( 3 ) return后⾯也可以不带参数,不带参数就是返回空,其实主要⽬的就是⽤于中断函数执⾏,返回调⽤函数处。
其它参考:
1、
2、
因, break,⽆法跳出双层循环,
2个解决⽅案:
1、将双层for循环写到⼀个⼦函数⾥⾯,然后⽤return 进⾏返回,退出⼦函数。
2、双层for循环不是单独的⼀个⼦函数,⽽是在⼀个主函数中,还有其它函数,此时⽤return,会导致整个函数结束,此时可以对双层for循环的两个变量进⾏同时赋值来终⽌双层for循环,注意,不能只将外层赋值终⽌值,否则会报错,因为内层还没有循环完毕,⽽外层已经超出范围,所以务必现将⼦循环变量终⽌后,再终⽌外循环变量。代码如下:
1. for (int i = 0; i < ws;i++){
2.  for (int j = 0; j < ls;j++){
3.  int elesum = rgb.at<Vec4b>(i, j)[0] + rgb.at<Vec4b>(i, j)[1] + rgb.at<Vec4b>(i, j)[2];
4.  if (elesum> 0)
5.  {
6.    i = ws;  j = ls; // 跳出双层循环赋值⽅式终⽌两个变量
7.    cout << "i: " << i << endl;
8.    cout << "j: " << j << endl;
9.    cout << endl;
10.      //break;
11.  }
12.  }
13. }