为什么我对 range-for 循环的更改不起作用?

Why is my change to a range-for loop not work?

我很茫然。我试图对两个向量求和,使它们等于目标,然后 return 它们的索引;但是,当 运行 带有 C++11 for 循环的代码时,结果不正确。对于向量 [2,7,11,15] 和 target=9,C++11 循环的结果是 [0, 0]。使用 C 风格的循环,它是 [0,1]。给出了什么?

class Solution {
public:
    vector<int> twoSumCstyle(vector<int>& nums, int target) {
        vector<int> sol(2);
        bool found = false;
        for (int i = 0; i< nums.size()-1; i++ ){
            for ( int x = i +1; x <nums.size(); x++){
                if (nums[i] + nums[x] == target) {
                    sol[0] = i;
                    sol[1] = x;
                    found = true;
                    break;
                }
            }
            if (found) break; 
        }
        return sol;  
    }

    vector<int> twoSumC11(vector<int>& nums, int target) {
        vector<int> sol(2);
        bool found = false;
        for (int i : nums ){
            for ( int x = i +1; x <nums.size(); x++){
                if (nums[i] + nums[x] == target) {
                    sol[0] = i;
                    sol[1] = x;
                    found = true;
                    break;
                }
            }
            if (found) break; 
        }
        return sol;  
    } 
};

您的外循环正在将 i 设置为您的 nums 向量中的实际值,但您的内循环正在使用它,就好像它是一个索引一样!作为一个明确的示例,在外循环的第一次迭代中,i 将是 2,因此您的内循环将从 x : 3.

开始

由于您实际上对索引作为计算的一部分感兴趣,因此使用传统样式的 for 循环可能最有意义。