Я работаю над изучением векторов в моем 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.
Вы получите странный вывод, потому что i
в цикле диапазона находится значение из массива, а не индекс. То есть,
for (auto i : a)
проходит через ценности из a
, В вашем коде вы эффективно печатаете последовательность a[a[0]]
, a[a[1]]
, так далее.
Код, который вы, вероятно, хотите
for (auto i : a) {
std::cout << i << std::endl;
}
Других решений пока нет …