提高飞思小车程序之一(跳转的艺术)[原]

来源:本站
导读:目前正在解读《提高飞思小车程序之一(跳转的艺术)[原]》的相关信息,《提高飞思小车程序之一(跳转的艺术)[原]》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《提高飞思小车程序之一(跳转的艺术)[原]》的详细说明。
简介:为了提高图像处理(特别是边缘检测)算法的效率,在循环处理中一旦找到灰度跳变就设定好标志位,然后返回,而不会继续在循环中苦苦搜索。因为目的已经达到了,已经找到该找的东西,不必把CPU浪费在循环中。下面WJ介绍几种实现的方法,供同学们参考。

为了提高图像处理(特别是边缘检测)算法的效率,在循环处理中一旦找到灰度跳变就设定好标志位,然后返回,而不会继续在循环中苦苦搜索。因为目的已经达到了,已经找到该找的东西,不必把CPU浪费在循环中。下面WJ介绍几种实现的方法,供同学们参考。

1 用得最多的break和continue.

大家都知道break是跳出总循环,不再进行循环;continue是跳出本次循环,执行下一次循环.

如for (int i=0;i<10;i++)

{

if (i==5)

break;

printf(i);

}

这样只能执行到i=5,打印输出0 1 2 3 4

如for (int i=0;i<10;i++)

{

if (i==5)

continue;

printf(i);

}

这样只能执行到i=9,打印输出0 1 2 3 4 6 7 8 9,没有5但是,有一个问题:break和continue只限于退出一层循环。如果是双重循环,那么只能退出内层循环。

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (i==5 && j==5)

break;

printf(i);

printf(j);

}

}

这个结果大家可以自己试一下。那怎么办呢,把上面的稍加改进即可。我们设置一个标志变量,如果内嵌循环退出,那么就把这个标志变量置位。然后在外层循环检测标志变量是否置位,为真的话跳出外层循环。BOOL bset=FALSE;

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (i==5 && j==5)

{

bset=TRUE;

break;

}

printf(i);

printf(j);

}

if (bset) break;

}2 在for循环里加限制条件.

BOOL bset=FALSE;

for(;!bset;)

{

for(;!bset;)

{

if (i==5 && j==5)

bset=TRUE;

else

{

printf(i);

printf(j);

} }

}

这种方法适用条件不多的情况,否则程序可读性很差。3 直接用goto

goto这个语句一直让不少人不齿,但是存在即合理。个人觉得它用在这种情况是最合适的了。 for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (i==5 && j==5)

{

goto out;

}

printf(i);

printf(j);

}

}

out:

your next code.....为什么有人一直抨击它呢?是因为用上它就会喜欢上它,无法自拨以至于见到程序跳转就想到goto,结果当然就挠乱整个程序的秩序。4 补充一条。单独写个void calculate (XXXXX) void calculate (XXXXX) { for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (i==5 && j==5)

return; printf(i);

printf(j);

}

} }这个方法相对来说比较高级,主要是形参的传递比较高级,可以是数值,地址,引用,等等,非常灵活。但也容易出错。建议用结构体指针。

提醒:《提高飞思小车程序之一(跳转的艺术)[原]》最后刷新时间 2024-03-14 01:22:15,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《提高飞思小车程序之一(跳转的艺术)[原]》该内容的真实性请自行鉴别。