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

Я работаю над изучением векторов в моем 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.

2

Решение

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

for (auto i : a)

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

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

for (auto i : a) {
std::cout << i << std::endl;
}
9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]