This question already has answers here:
Range based for-loop on array passed to non-main function
                                
                                    (2个答案)
                                
                        
                                5年前关闭。
            
                    
我想迭代一个函数内的数组。以下代码无法编译。

void printArr(int arr[])
{
    for (auto x : arr)
    {
        cout << x << endl;
    }
}


我知道arr实际上是第一个元素的指针。
感谢您的帮助。

最佳答案

原因是基于范围的循环需要数组类型,标准库容器或具有合适的beginend迭代器的对象。在您的函数中,arr只是一个指针(诸如int arr[]之类的函数参数被调整为int* arr)。

从实际角度看,基于范围的循环无法知道要打印多少个元素,因此处理指针毫无意义。

您可以尝试通过引用传递数组。

template <size_t N>
void printArr(const int (&arr)[N])
{
    for (auto x : arr)
    {
        cout << x << endl;
    }
}


模板函数已用于允许不同长度的数组的地方。您还可以使元素类型成为模板参数:

template <typename T, size_t N>
void printArr(const T (&arr)[N])
{
  ....

关于c++ - 带指针的基于范围的循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27143572/

10-16 19:50
查看更多