对于下面的代码段,我正在使用一个包含项{1、2、3}的向量,我只想获取两对乘积之和,例如(1 * 2)+( 1 * 3)+(2 * 3),即11。
for(unsigned i = {0}; i < vec.size(); ++i) {
for(unsigned j = i + 1; j < vec.size(); ++j) {
// ^^^^^^^
preresult = vec.at(i) * vec.at(j);
result += preresult;
}
}
问题在于,当我从1开始进入内循环j
时,我的答案是30,只有更改为j = i + 1
时我才得到正确的答案。
有人可以向我解释为什么吗? j = 1
不能正常工作吗?
答案 0 :(得分:1)
只有3个值,因此我们可以在较短的空间中展开循环
从j = 1
result += vec.at(0) * vec.at(1); // 2
result += vec.at(0) * vec.at(2); // 3
result += vec.at(1) * vec.at(1); // 4 Oops: pairing 2 with itself
result += vec.at(1) * vec.at(2); // 6
result += vec.at(2) * vec.at(1); // 6 Oops: Seen already
result += vec.at(2) * vec.at(2); // 9 Oops: pairing 3 with itself
从j = i + 1
result += vec.at(0) * vec.at(1); // 2
result += vec.at(0) * vec.at(2); // 3
result += vec.at(1) * vec.at(2); // 6