向量迭代器不从索引 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);