Странная проблема с диапазоном для цикла

Я работаю над изучением векторов в моем C++ объектно-ориентированном 1 классе, и мы ввели концепцию диапазона, основанного на циклах. Я решил практиковать циклы, основанные на диапазоне, отдельно, чтобы привыкнуть к синтаксису, но натолкнулся на странную проблему.

 #include<iostream>
 using namespace std;
 int main()
 {
   int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
   for ( auto i: a)
     {
       cout << a[i] << " ";
     }

 return 0;
 } 

Когда я запускаю приведенный выше код, мой вывод следующий.

2 3 4 5 6 7 8 9 0 1 Нажмите любую клавишу, чтобы продолжить...

Мой вывод должен читать

1 2 3 4 5 6 7 8 9 0 Нажмите любую клавишу, чтобы продолжить...

Может кто-нибудь сказать мне, почему мой первый индекс пропущен? У меня есть Visual Studio 2013 Professional.

1 ответ

Решение

Вы получите странный вывод, потому что i в цикле диапазона находится значение из массива, а не индекс. То есть,

for (auto i : a)

перебирает значения a, В вашем коде вы эффективно печатаете последовательность a[a[0]], a[a[1]], так далее.

Код, который вы, вероятно, хотите

for (auto i : a) {
    std::cout << i << std::endl;
}
Другие вопросы по тегам