下面的代码是关于查找给定向量中的重复值。当我使用后/前递增运算符而不是下面使用的正常算术运算时,它不起作用。原因是什么?
class Solution {
public:
int findDuplicate(vector<int>& nums)
{
int d=0;
auto it1=nums.begin();
auto it2=nums.end();
vector<int>::iterator it3;
while (it1 != it2)
{
it3 = it1 + 1; //it3=it1++ or it3=++it1 ;
while (it3 != it2)
{
if (*(it3)==*(it1))
{
d=*(it3);
break;
}
else
it3++;
}
if(d)
break;
it1 += 1; //it1++ or ++it1;
}
return d;
}
};
it1+=1; //it1++ or ++it1;
这将用于前递增或后递增。因为你没有对增加的it1
做任何事情,所以你在这里用什么都没关系。这三个选项都可以。
it3=it1+1; //it3=it1++ or it3=++it1 ;
这是行为真正改变的地方
it3 = it1 + 1;
做你想做的。设置it3
为一阶it1
,不修改it1
。
it3 = ++it1;
这也将it3
设置为比it1
高一倍,但在此过程中,它也会增加it1
,这是您不希望的。
it3 = it1++;
这是最糟糕的。它将it3
设置为it1
(NOT one-past),然后将it1
加1。这样就不会得到你想要的值。
如果你真的想在这里使用自增运算符,你可以使用
(it3 = it1)++;
这将给it3
it1
的值,然后增加it3
。但这很难看。没有真正的理由偏离it3 = it1 + 1;
。