首页 > 解决方案 > For 循环条件(整数向量)。如何获得先前的值?

问题描述

我有整数向量,仅由1or0值填充。我想要做的是,当当前值为1先前/旧0或相反 ifCurrent=0Previous=1时,然后将另一个变量(AvgCan)分配给0.

我试图从 FOR 条件中获取先前的值。但是,如果我以通常的方式尝试它,我仍然会一直得到相同的值,直到循环结束。问题在于第一个 if 语句。

int AvgCan = 0;
int OldAvgCan = 0;
int iteration = 0;
int iterationDecrease = 0;

for (int i = 0; i < resultINT.size(); i++)
{
  //myFileO << to_string(resultINT.at(i)) + "\n";
  cout << to_string((resultINT.at(i))) + " Current" + "\n";
  cout << to_string((resultINT.at(i - iteration))) + " Old" + "\n" << endl;
  cout << to_string(AvgCan) + "\n" << endl;

  iteration = i;
  iterationDecrease = i - 1;
  if ((resultINT.at(i)) != (resultINT.at(iteration - iterationDecrease)))
  {
     AvgCan = 0;
  }

  if ((resultINT.at(i)) == 1)
  {
     /*if ((resultINT.at(i- iteration)) != 1)
      {
          AvgCan = 0;
      }*/
     AvgCan++;
  }

  if ((resultINT.at(i)) == 0)
  {
     /*if ((resultINT.at(i- iteration))!=0 )
     {
         AvgCan = 0;
     }*/
     AvgCan--;
  }
  myFileO << to_string(AvgCan) + "\n";
}

如您所见,我将迭代器分配iiteration变量i - 1iterationDecrease. (我也尝试过i--类似的可能方式。)

我模拟了数据,所以结果是1,1,1,1,0,0,0,0. 当它从1to改变0并到达 if 条件时,但每次下一次迭代它仍然1old values一样返回,即使它是0.

在此处输入图像描述

我还添加了屏幕截图以便更好地理解。右侧是控制台中的输出。

标签: c++algorithmfor-loopif-statementstdvector

解决方案


这里

iteration = i;
iterationDecrease = i - 1;

if ((resultINT.at(i)) != (resultINT.at(iteration - iterationDecrease)))

the iteration - iterationDecrease等于i - (i - 1)which is always 1。实际上意味着if该语句等效于

if ((resultINT.at(i)) != (resultINT.at(1)))

你可能是说

if (resultINT.at(iteration) != resultINT.at(iterationDecrease))

这仍然不正确,例如 when i==0iterationDecrease = -1which 将抛出异常,用于调用.at(-1)

因此,您需要从i=1循环开始,

for (int i = 1; i < resultINT.size(); i++)
{
   // ...code
   if (resultINT[i] != resultINT[i-1])
   {
       // ...code
   }
}

推荐阅读