【发布时间】:2016-04-01 14:51:34
【问题描述】:
我正在我的 C++ 面向对象 1 类中学习向量,我们已经引入了基于范围的 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 专业版。
【问题讨论】:
-
你不应该打印
a[i],而应该只打印i -
基于范围的 for 循环遍历元素,而不是数组的索引
-
i 不是 a 的索引,而是 a 的第一个值,尽管每次循环 i 都是 a 的下一个值。将类型 a 更改为字符串,你的 a[i] 不会编译,
-
您刚刚发现了一种出色的代码混淆技术! :-)
-
@RichardHodges,这就是 JavaScript 的工作原理,顺便说一句。前几天,当我需要对一些 Web 脚本做一些小改动时,我已经准备好了。最后我意识到每个循环的 JS 迭代索引(或 assoc 数组中的键),而不是值!他们在 ECMA 脚本中有更新版本,它迭代值 - 但当然,我们的 IE 版本不支持。
标签: c++ arrays ranged-loops