当满足条件时,带有2个变量的for循环是否有可能仅停止递增其中一个变量?例如
for(int i = 0, j = 0; i < 5 && j < 10; i++, j++)
{
cout << i << " " << j << endl;
}
,输出看起来像
0 0
1 1
2 2
3 3
4 4
4 5
4 6
4 7
4 8
4 9
这是我的实际代码。我想要两个变量的条件
cout << sp.dets.size() << " " << gt.groundtruth.size() << endl;
for (int i = 0, j = 0; i < sp.dets.size() && j < gt.groundtruth.size(); j < gt.groundtruth.size() ? j++ : j, i < sp.dets.size() ? i++ : i)
{
cout << i << " " << j << endl;
}
sp.dets.size = 0
gt.groundtruth.size()= 8
如果解决方案适用于任何数字,即i > j or i < j or i = 0 or j = 0
答案 0 :(得分:1)
您可以使用三元语句来增加变量i
值。如下所示:
for(int i = 0, j = 0; i < 5 && j < 10; j++, i<4? i++: i)
{
cout << i << " " << j << endl;
}
这将输出预期结果。
答案 1 :(得分:0)
这样的事可能有用,
int k = 0;
int val = 4;
for(int i = 0, j = 0; i < 10 && j < 10; i++, j++){
if (i>=val){
k=val;
cout << k << " "<< j << endl;
}
else
cout << i << " " << j << endl;
}
打印这个,
0 0
1 1
2 2
3 3
4 4
4 5
4 6
4 7
4 8
4 9
答案 2 :(得分:0)
您可以对两个变量使用三元运算符。只有当两者都达到目的值时才能确保改变你的状态
for (int i = 0, j = 0;
i != 5 || j != 10;)
{
i += i < 5 ? 1 : 0;
j += j < 10 ? 1 : 0;
}
你会注意到我将增量移动到循环体中,这在我看来提高了可读性。
答案 3 :(得分:0)
不要试图通过尝试将所有逻辑放在一行中来过于聪明。更重要的是,您的代码可以被其他人(以及您自己在两周内)读取而不是保存一行。如果两个变量的递增逻辑比每个循环增加一个更复杂,那么将它们放在单独的行中,如下所示:
while (i<5 && j<10) {
...
// complicated expression calculating new i
// complicated expression calculating new j
}
在你的情况下,你也可以翻转逻辑:
for (int i=0; i<max(sp.dets.size(), gt.groundtruth.size(); i++) {
cout << min(i, sp.dets.size()-1)
<< ","
<< min(i, gt.groundtruth.size()-1)
<< endl;
}