[英]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.