是由于运算符优先级吗?
Is it due to operator precedence?
我有以下代码:
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
int maxScore(vector<int>& cardPoints, int k) {
if(k==cardPoints.size()) return accumulate(cardPoints.begin(), cardPoints.end(), 0);
int endSum=accumulate(cardPoints.begin()+(cardPoints.size()-k), cardPoints.end(), 0);
int maxValue=endSum;
int i=0;
int j=cardPoints.size()-k;
while(i<k && j<cardPoints.size()) {
endSum-=cardPoints[j++]+cardPoints[i++]; //-> will change this line
maxValue=max(maxValue, endSum);
}
return maxValue;
}
int main() {
vector<int> v={100,40,17,9,73,75};
cout<<maxScore(v, 3);
return 0;
}
我得到的输出是:157
。
但是,如果我将上面注释的行更改为:
endSum=endSum-cardPoints[j++]+cardPoints[i++];
我得到的输出是 248
。现场示例分别为 here and here。我认为我在上面的两个陈述中没有做任何不同的事情。我 认为 这可能是由于 i
和 j
的 post 增量操作。由于它们都在一行上执行,所以我无法使用任何打印语句进行调试。
有人可以指出为什么我得到不同的输出吗?
endSum -= cardPoints[j++] + cardPoints[i++];
=
的等效语句为:
endSum = endSum - (cardPoints[j++] + cardPoints[i++]);
或
endSum = endSum - cardPoints[j++] - cardPoints[i++];
这一行:
a -= b + c;
相当于:
a = a - (b + c);
或
a = a - b - c;
与不相同:
a = a - b + c;
我有以下代码:
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
int maxScore(vector<int>& cardPoints, int k) {
if(k==cardPoints.size()) return accumulate(cardPoints.begin(), cardPoints.end(), 0);
int endSum=accumulate(cardPoints.begin()+(cardPoints.size()-k), cardPoints.end(), 0);
int maxValue=endSum;
int i=0;
int j=cardPoints.size()-k;
while(i<k && j<cardPoints.size()) {
endSum-=cardPoints[j++]+cardPoints[i++]; //-> will change this line
maxValue=max(maxValue, endSum);
}
return maxValue;
}
int main() {
vector<int> v={100,40,17,9,73,75};
cout<<maxScore(v, 3);
return 0;
}
我得到的输出是:157
。
但是,如果我将上面注释的行更改为:
endSum=endSum-cardPoints[j++]+cardPoints[i++];
我得到的输出是 248
。现场示例分别为 here and here。我认为我在上面的两个陈述中没有做任何不同的事情。我 认为 这可能是由于 i
和 j
的 post 增量操作。由于它们都在一行上执行,所以我无法使用任何打印语句进行调试。
有人可以指出为什么我得到不同的输出吗?
endSum -= cardPoints[j++] + cardPoints[i++];
=
的等效语句为:
endSum = endSum - (cardPoints[j++] + cardPoints[i++]);
或
endSum = endSum - cardPoints[j++] - cardPoints[i++];
这一行:
a -= b + c;
相当于:
a = a - (b + c);
或
a = a - b - c;
与不相同:
a = a - b + c;