基于范围的循环的奇怪问题

时间:2016-04-01 14:51:34

标签: c++ arrays ranged-loops

我正在研究面向C ++面向对象的类中的向量,并且我们已经介绍了基于范围的for循环的概念。我决定分别练习基于for循环的范围,这样我就可以习惯语法,但是我遇到了一个奇怪的问题。

 #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按任意键继续......

有谁能告诉我为什么我的第一个索引会被跳过?我有视觉工作室2013专业。

1 个答案:

答案 0 :(得分:9)

你得到了奇怪的输出,因为范围循环中的i是数组中的值,而不是索引。也就是说,

for (auto i : a)

循环遍历a。在您的代码中,您可以有效地打印序列a[a[0]]a[a[1]]等。

您可能想要的代码是

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