多重loop之 continue break設計

昨天看到msdn一個找滿足所有criterion的item,找到則返回一個,總結了多重循環程舍continue的設計 ,挺有意思。感覺這種問題大家都已經屢見不鮮了。
 blogs.msdn.com/b/ericlippert/archive/2010/01/11/continuing-to-an-outer-loop.aspx 

for(item)
{
	for(criterion)
	{
		if(!item.ismetby(criterion))
		{
			next item loop//as one criterion not met, while continue can only continue to next criterion loop?
		}
	}
}


for(item)
{
	for(criterion)
	{
		if(!item.ismetby(criterion))
		{
			next item loop//as one criterion not met, while continue can only continue to next criterion loop?
			goto: continuei
		}
		find itemi
		break;
	}
<span style="white-space:pre">	</span>break;
	continuei: continue;
}


shortage: use goto, but maybe sometimes, especially multi loop it's more appropriate

for(item)
{
	bool foundflag=true;
	for(criterion)
	{
		if(!item.ismetby(criterion))
		{
			next item loop//as one criterion not met, while continue can only continue to next criterion loop?
			foundflag=false;
		}
	}
	if(foundflag==true)
	{
		find itemi;
		break;
	}
	//continuei: continue;
}

shortage: if one criterion not met, can not stop criterion instantly for next item loop

for(item)
{
	if(Allmet(item[i], criterion[]))
	{
		found itemi;
		break;
	}
}

shortage: execute efficientcy is effected, but that does not effect much, maybe.


continue break 只能對當前loop奇效,continue是指當前不滿足某條件,不用繼續當前循環,直接下一層loop了,有點剪枝的味道,break則是滿足了某條件,可以直接退出循環,也有點剪枝的味道,但是也包含找到正確解如果不break可能解錯了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章