为什么代码无法使用前/后增量运算符?



下面的代码是关于查找给定向量中的重复值。当我使用后/前递增运算符而不是下面使用的正常算术运算时,它不起作用。原因是什么?

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)++;

这将给it3it1的值,然后增加it3。但这很难看。没有真正的理由偏离it3 = it1 + 1;

相关内容

  • 没有找到相关文章

最新更新