我会建议 lambda:
auto do_work = [&] {
for(int i = 0; i < sizeArray; ++i){
for(int j = i; j > 0; --j){
if (s[i].positionX == s[i-1].positionX){
s[i].positionY = s[i-1].positionY;
return;
}
}
}
};
do_work(); //you can call this multiple times if you need to!
不break,不goto。:-)
在这种情况下,它的用途与break和相同goto,但该技术似乎很干净,至少对我而言。此外,一旦你有了一个名字(一个好名字)的 lambda,你可以根据需要多次使用它——所以这种技术增加了代码的可读性并鼓励代码重用。
当然,如果您不需要多次调用它,那么您可能不需要名称。你可以这样做:
[&]
{
//your code with the added return statement.
}();
但正如我所说,name即使您不多次调用它也会增加可读性。
如果由于某种原因您不能使用 lambda,那么您仍然可以避免使用额外的变量,例如stop以及涉及它的额外工作(正如@ssantos 的回答所建议的那样):
for(int i = 0; i < sizeArray; ++i){
for(int j = i; j > 0; --j){
if (s[i].positionX == s[i-1].positionX){
s[i].positionY = s[i-1].positionY;
i = sizeArray; //it will break the outer loop!
break;
}
}
}
希望有帮助。