C++ 如何停止嵌套for循环
我希望当我找到一个在x中具有相同位置的对象时,两个循环都停止C++ 如何停止嵌套for循环,c++,loops,for-loop,if-statement,C++,Loops,For Loop,If Statement,我希望当我找到一个在x中具有相同位置的对象时,两个循环都停止 这是我的C++代码: for(int i = 0; i < sizeArray; ++i){ for(int j = i; j > 0; --j){ if (s[i].positionX == s[j-1].positionX){ s[i].positionY = s[j-1].positionY; } } } for(int i=0;i0;--j
这是我的C++代码:
for(int i = 0; i < sizeArray; ++i){
for(int j = i; j > 0; --j){
if (s[i].positionX == s[j-1].positionX){
s[i].positionY = s[j-1].positionY;
}
}
}
for(int i=0;i0;--j){
如果(s[i].positionX==s[j-1].positionX){
s[i].位置Y=s[j-1].位置Y;
}
}
}
如果我使用break代码>它仅中断内部for循环。什么是阻止两者的最好方法
选项:
将循环的索引设置为“最大值”(或“最小值”)以终止循环
将所有这些放在函数中并使用return
使用goto
使用Lambda
将布尔停止码设置为true、break,然后侦听break并中断其他循环
?
我猜你要求停止for
循环。你要找的关键词是。但是,如果要退出
循环的两个,则需要在代码中添加一个变量-
bool stop = false;
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;
stop = true;
break;
}
}
if (stop) {
break;
}
}
bool-stop=false;
对于(int i=0;i0;--j){
如果(s[i].positionX==s[i-1].positionX){
s[i]。位置Y=s[i-1]。位置Y;
停止=真;
打破
}
}
如果(停止){
打破
}
}
我猜您要求停止for
循环。你要找的关键词是。但是,如果要退出
循环的两个,则需要在代码中添加一个变量-
bool stop = false;
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;
stop = true;
break;
}
}
if (stop) {
break;
}
}
bool-stop=false;
对于(int i=0;i0;--j){
如果(s[i].positionX==s[i-1].positionX){
s[i]。位置Y=s[i-1]。位置Y;
停止=真;
打破
}
}
如果(停止){
打破
}
}
若要中断最里面的循环,请使用中断
要跳出最外层的循环,请使用goto
或使用break
和“应停止”标志的组合。要跳出最内层的循环,请使用break
要跳出最外层的循环,请使用goto
或使用break
和“应该停止”标志的组合。您可以使用break
停止for
循环
使用嵌套的for
循环,事情就不那么容易了。你可以实现你的目标
- 通过设置标志(
done=1;
并将其与(int j=i;j>0&&!done;--j)的一起使用
- 或者使用
goto
。尽管一些人不赞成使用goto
,但如果使用正确且谨慎,它可能是解决某些问题的合法方法,例如错误处理,或者通常是“已完成处理”
您可以使用中断停止for
循环
使用嵌套的for
循环,事情就不那么容易了。你可以实现你的目标
- 通过设置标志(
done=1;
并将其与(int j=i;j>0&&!done;--j)的一起使用
- 或者使用
goto
。尽管一些人不赞成使用goto
,但如果使用正确且谨慎,它可能是解决某些问题的合法方法,例如错误处理,或者通常是“已完成处理”
我建议兰博达:
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!
但正如我所说,name
增加了可读性,即使您不多次调用它
如果出于某种原因不能使用lambda,那么仍然可以避免使用额外的变量,例如stop
,以及与之相关的额外工作(正如@ssantos的回答所建议的):
for(int i=0;i0;--j){
如果(s[i].positionX==s[i-1].positionX){
s[i]。位置Y=s[i-1]。位置Y;
i=sizeArray;//它将打破外部循环!
打破
}
}
}
希望能有所帮助。我建议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!
但正如我所说,name
增加了可读性,即使您不多次调用它
如果出于某种原因不能使用lambda,那么仍然可以避免使用额外的变量,例如stop
,以及与之相关的额外工作(正如@ssantos的回答所建议的):
for(int i=0;i0;--j){
如果(s[i].positionX==s[i-1].positionX){
s[i]。位置Y=s[i-1]。位置Y;
i=sizeArray;//它将打破外部循环!
打破
}
}
}
希望这能有所帮助。试试下面的方法
bool match = false;
for(int i = 0; i < sizeArray && !match; ++i){
for(int j = i; j > 0 && !match; --j){
if ( match = ( s[i].positionX == s[i-1].positionX ) ){
s[i].positionY = s[i-1].positionY;
}
}
}
for(int i = 0; i < sizeArray; ++i){
int j = i;
while ( j != 0 && s[i].positionX != s[i-1].positionX ) --j;
if ( j != 0 ) {
s[i].positionY = s[i-1].positionY;
break;
}
}
bool match=false;
对于(int i=0;i0&!match;--j){
如果(匹配=(s[i].positionX==s[i-1].positionX)){
s[i]。位置Y=s[i-1]。位置Y;
}
}
}
另一种方法如下
bool match = false;
for(int i = 0; i < sizeArray && !match; ++i){
for(int j = i; j > 0 && !match; --j){
if ( match = ( s[i].positionX == s[i-1].positionX ) ){
s[i].positionY = s[i-1].positionY;
}
}
}
for(int i = 0; i < sizeArray; ++i){
int j = i;
while ( j != 0 && s[i].positionX != s[i-1].positionX ) --j;
if ( j != 0 ) {
s[i].positionY = s[i-1].positionY;
break;
}
}
for(int i=0;i
尝试以下操作
bool match = false;
for(int i = 0; i < sizeArray && !match; ++i){
for(int j = i; j > 0 && !match; --j){
if ( match = ( s[i].positionX == s[i-1].positionX ) ){
s[i].positionY = s[i-1].positionY;
}
}
}
for(int i = 0; i < sizeArray; ++i){
int j = i;
while ( j != 0 && s[i].positionX != s[i-1].positionX ) --j;
if ( j != 0 ) {
s[i].positionY = s[i-1].positionY;
break;
}
}
bool match=false;
对于(int i=0;i0&!match;--j){
如果(匹配=(s[i].positionX==s[i-1].positionX)){
s[i]。位置Y=s[i-1]。位置Y;
}
}
}
另一种方法如下
bool match = false;
for(int i = 0; i < sizeArray && !match; ++i){
for(int j = i; j > 0 && !match; --j){
if ( match = ( s[i].positionX == s[i-1].positionX ) ){
s[i].positionY = s[i-1].positionY;
}
}
}
for(int i = 0; i < sizeArray; ++i){
int j = i;
while ( j != 0 && s[i].positionX != s[i-1].positionX ) --j;
if ( j != 0 ) {
s[i].positionY = s[i-1].positionY;
break;
}
}
for(int i=0;i
将您发布的代码放在自己的函数中,并在作业后将其返回。将您发布的代码放在自己的函数中,并在作业后将其返回。while语句(例如while x!=y)能解决您的问题吗?break;能解决问题吗?我已经试过了