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 

異なる結果が得られるのはなぜですか?

4

1 に答える 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 << " ";
于 2013-03-28T01:17:47.337 に答える