如何正确为std::array使用范围基for循环?遍历结果与传统循环不一致
问题原因
范围基 for 循环的循环变量直接对应容器的元素值,不是数组下标。你代码中错误将循环得到的元素值作为下标去二次访问std::array,才导致输出结果异常:
你初始化的数组元素为1、2、3、4、5,依次用这些值作为下标访问数组时:
- 第一次循环i=1,取
ar[1]得到2 - 第二次循环i=2,取
ar[2]得到3 - 第三次循环i=3,取
ar[3]得到4 - 第四次循环i=4,取
ar[4]得到5 - 第五次循环i=5,取
ar[5]属于数组越界访问,属于未定义行为,本次运行刚好读到内存中存储的0值,因此最后一位输出为0
正确使用方式
范围基 for 循环会自动遍历容器从begin()到end()的所有元素,直接输出循环变量即可,不需要再通过下标访问数组:
for(const int& i: ar) { std::cout << i << " "; }
修改后运行输出结果会和前两种遍历方式完全一致。
内容的提问来源于stack exchange,提问作者skidog
相关产品推荐
相关产品推荐

