簡體   English   中英

為什么我對 range-for 循環的更改不起作用?

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

我不知所措。 我試圖將兩個向量相加,使它們等於目標,然后返回它們的索引; 但是,當使用 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 循環可能最有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM