我正在试验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;
}
Run Code Online (Sandbox Code Playgroud)
等待运行环境,我得到不同的输出如下:
1 2 3 4
2 3 4 0
Run Code Online (Sandbox Code Playgroud)
为什么我会得到不同的结果?
for (auto i: alist)
Run Code Online (Sandbox Code Playgroud)
这将提取每个值的alist,所以i就变成了:
1,2,3,4
Run Code Online (Sandbox Code Playgroud)
然后你这样做
cout << alist[i] << " ";
Run Code Online (Sandbox Code Playgroud)
这意味着alist[1],alist[2],alist[3]和alist[4],而不是值1,2,3,4,你应该简单地写为:
cout << i << " ";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |