c++ - For 循环条件(整数向量)。如何获得先前的值?
问题描述
我有整数向量,仅由1
or0
值填充。我想要做的是,当当前值为1且先前/旧为0或相反 ifCurrent=0
和Previous=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";
}
如您所见,我将迭代器分配i
给iteration
变量i - 1
和iterationDecrease
. (我也尝试过i--
类似的可能方式。)
我模拟了数据,所以结果是1,1,1,1,0,0,0,0
. 当它从1
to改变0
并到达 if 条件时,但每次下一次迭代它仍然1
像old values一样返回,即使它是0
.
我还添加了屏幕截图以便更好地理解。右侧是控制台中的输出。
解决方案
这里
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==0
,iterationDecrease = -1
which 将抛出异常,用于调用.at(-1)
因此,您需要从i=1
循环开始,
for (int i = 1; i < resultINT.size(); i++)
{
// ...code
if (resultINT[i] != resultINT[i-1])
{
// ...code
}
}
推荐阅读
- arrays - 检查数组是否包含比其他值更多的 nil
- javascript - 让 TypeScript 知道函数绑定到 HTMLElement 而不是当前对象
- events - Apache Flink 1.6.0 - StateTtlConfig 和 ListState
- javascript - 用于过滤表结果的搜索栏在 React 中超时
- json - TypeScript - 隔离模块和 JSON 导入
- hyperledger-composer - “无法添加具有 ID 的对象,因为对象已存在”但对象在游乐场测试环境中不可见
- javascript - 以编程方式生成/激活的文件输入并不总是触发 `input` 事件
- sql - MS Access SQL - 左加入只有唯一匹配的表
- html - 垃圾邮件程序和输入表单
- javascript - 找出一个元素是否定义了 CSS“悬停”伪类?