为什么我对 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 循环可能最有意义。
我很茫然。我试图对两个向量求和,使它们等于目标,然后 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 循环可能最有意义。