对于具有多个变量

时间:2016-11-21 07:46:05

标签: c++ for-loop

当满足条件时,带有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

,那就太好了

4 个答案:

答案 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;
}