1.goto
goto不是不能用
goto的缺点是:1.使程序不可读;2.无法对范围内的对象执行析构
很多人只知道第一个缺点,其实C++不推荐用的根本原因确实第二个。不推荐用setjmp()/longjmp()也是这个原因。
明白了原因,楼主就可以仔细分析一下:(1)尽量不要直接退出多重循环(2)如果要直接退出,必须保证所有对象能正确析构,比如用抛出异常的方法。(3)在确保不会有数据丢失的情况下,也可以使用goto/setjmp/longjmp等手段
2,设标记
for(i = 0; i < a; i++)
{
for(j = 0; j < b; j++)
{
for(k = 0; k < c; k++)
{
do sth.
if(condition)
break;
}
if(k >= c)
break;
}
if(j >= b)
break;
}
或
bool noStop = true;
for (int i = 0; ((条件1)&&(Stop)); ++i){
for (int j = 0; ((条件1)&&(noStop)); ++j){
for (int k = 0; ((条件1)&&(noStop)); ++k){
// ........
if (...) noStop = false;
//..................
3,用return 效率和简单性最好
int BFMatch(char *s,char *p) //BF算法 { int i,j; i=0; while(i<strlen(s)) { j=0; while(s[i]==p[j]&&j<strlen(p)) { i++; j++; } if(j==strlen(p)) return i-strlen(p); /直接退出2层循环,而不是用break i=i-j+1; //指针i回溯 } return -1; }