向量迭代器不从索引 0 开始
Vector iterator does not start at index 0
我是向量和迭代器的新手。为什么第二个 for 循环中的迭代器不从索引 0 开始?
int main() {
PS1Solution instance;
std::vector<int> result;
std::vector<int> testCase = {2, 7, 11, 15};
int target = 9;
result = instance.twoSum(testCase, target);
for (auto it = result.begin(); it != result.end(); it++)
printf("%d\n", result[*it]);
testCase.clear();
result.clear();
testCase = {3, 2, 4};
target = 6;
result = instance.twoSum(testCase, target);
for (auto it = result.begin(); it != result.end(); it++) // for (auto& val : result) also doesn't work
printf("%d\n", result[*it]);
return 0;
}
range-for 循环也不起作用。也没有:for (auto it = &*result[0]; ...)
如有必要,我可以 post 我的 twoSum
实现。不过,它非常简单:它使用一个简单的嵌套 for 循环(索引,而不是迭代器,因为我需要索引)。
迭代器不是索引。
迭代器就像一个指向特定元素的指针。取消引用迭代器会为您提供它所引用的值,而不是该值的索引。所以,使用 result[*it]
是错误的,它本身应该只是 *it
,例如:
for (auto it = result.begin(); it != result.end(); it++)
printf("%d\n", *it);
一个range-for循环在内部为您包装了这个逻辑。循环变量是解引用的值,例如:
for (auto& val : result)
printf("%d\n", val);
我是向量和迭代器的新手。为什么第二个 for 循环中的迭代器不从索引 0 开始?
int main() {
PS1Solution instance;
std::vector<int> result;
std::vector<int> testCase = {2, 7, 11, 15};
int target = 9;
result = instance.twoSum(testCase, target);
for (auto it = result.begin(); it != result.end(); it++)
printf("%d\n", result[*it]);
testCase.clear();
result.clear();
testCase = {3, 2, 4};
target = 6;
result = instance.twoSum(testCase, target);
for (auto it = result.begin(); it != result.end(); it++) // for (auto& val : result) also doesn't work
printf("%d\n", result[*it]);
return 0;
}
range-for 循环也不起作用。也没有:for (auto it = &*result[0]; ...)
如有必要,我可以 post 我的 twoSum
实现。不过,它非常简单:它使用一个简单的嵌套 for 循环(索引,而不是迭代器,因为我需要索引)。
迭代器不是索引。
迭代器就像一个指向特定元素的指针。取消引用迭代器会为您提供它所引用的值,而不是该值的索引。所以,使用 result[*it]
是错误的,它本身应该只是 *it
,例如:
for (auto it = result.begin(); it != result.end(); it++)
printf("%d\n", *it);
一个range-for循环在内部为您包装了这个逻辑。循环变量是解引用的值,例如:
for (auto& val : result)
printf("%d\n", val);