在嵌套的for循环中从j = i +1 vs j = 1开始

时间:2019-11-13 23:06:54

标签: c++ for-loop variables

对于下面的代码段,我正在使用一个包含项{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不能正常工作吗?

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