首页 > 解决方案 > for (x:y) 循环在 C++ 中不能正常工作

问题描述

我尝试了 2 个不同的 for 循环,其中 1 个有效,但另一个似乎无效。第一个 for 循环的输出:2 3 4 5 5,第二个 for 循环的输出:1 2 3 4 5。

#include <iostream>
int main() 
{
    int arr[5] = {1,2,3,4,5};
    for (int y : arr) std::cout << arr[y] << std::endl;
    std::cout << "---------" << std::endl;
    for (int i = 0; i<5;i++){
        std::cout << arr[i] << std::endl;
    }
    return 0;
}

标签: c++

解决方案


第一个循环是一个基于范围的循环,它被用作一个更易读的等价于在一系列值上操作的传统 for 循环,例如容器中的所有元素 ( https://en.cppreference.com/w/cpp/语言/范围

它类似于 java 或 C# foreach样式循环。

在这种循环中, y 采用的值是数组本身中元素的值(1,2,3,4,5),而不是索引(0,1,2...),所以你不要'不需要打印arr[y],只打印y自己

例如,以下代码中的两个循环都将打印 10,20,30,40,50

#include <iostream>
int main() 
{
    int arr[5] = {10,20,30,40,50};
    for (int y : arr) std::cout << y << std::endl;
    std::cout << "---------" << std::endl;
    for (int i = 0; i<5;i++){
        std::cout << arr[i] << std::endl;
    }
    return 0;
}

推荐阅读