foreach(int i.. 和 foreach(auto i 的区别

4

我正在使用带有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 

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

尝试使用vector<std::string> alist = {"one", "two", "three", "four" }; - MSalters
1个回答

8
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 << " ";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接