C++ 从j=i+;嵌套for循环中的1 vs j=1

C++ 从j=i+;嵌套for循环中的1 vs j=1,c++,for-loop,variables,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);

对于下面的代码,我使用了一个包含项{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;
    }
}
for(无符号i={0};i
问题是,当我从1开始在内部循环中使用
j
时,我的答案是30,只有当我更改为
j=I+1
时,我才得到正确的答案


有人能给我解释一下原因吗?
j=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

如果从1开始,则每个数对包含两次,并且每个数的“对”本身包含两次。
int ans=0;对于(int i=0;i使用调试器,通过程序),您将看到它正在做什么。请AuvibGER,考虑扩展您的注释(指出所有可能的对和不同的对之间的差异)为答案。