foreach(int i.)与foreach(auto i.)的区别

Difference between foreach(int i.. and foreach(auto i

本文关键字:foreach 区别 int auto      更新时间:2023-10-16

我正在Mac OX (LLVM 4.2)附带的Clang编译器上试验c++ 11功能,以下结果令我困惑:

// clang compile with "c++ -std=c++11 -stdlib=libc++"
#include <iostream>
#include <vector>
int main(void) {
    using namespace std;
    vector<int> alist={1, 2, 3, 4};
    for (int i=0; i<alist.size(); i++) {
        cout << alist[i] << " ";
    }
    cout << endl;
    for (auto i: alist) {
        cout << alist[i] << " ";
    }
    cout << endl;
    return 0;
}

等待运行环境,我得到不同的输出如下:

1 2 3 4 
2 3 4 0 

为什么我得到不同的结果?

for (auto i: alist)

获取alist中的所有值,因此i变成:

1,2,3,4

你然后做

cout << alist[i] << " ";

表示alist[1]alist[2]alist[3]alist[4],而不是1、2、3、4。你应该简单地写:

cout << i << " ";