为什么基于for循环而不是直接在C ++中使用参数数组?

时间:2017-06-27 13:09:47

标签: c++

我试图遍历以下arr数组。但Visual Studio显示它有错误。

void printArray(int* arr)
{
    for (int i : arr)
    {
        cout << i << ",";
    }
}

1 个答案:

答案 0 :(得分:0)

在您的示例中,arr不是数组,而是指针。因此,不可能仅从指针确定数组中的项目数:这就是为什么采用指向数组初始元素的指针的API也会占用该数组中元素的数量,例如:

void printArray(int *arr, size_t count)

由于数组中的项目数是未知的,因此arr不能在范围循环中使用。

您将范围数据复制到std::vector以在范围循环中使用它:

void printArray(int *arr, size_t count) {
    for (int i : vector<int>(arr, arr+count)) {
        cout << i << ",";
    }
}

Demo.

然而,传递std::vector代替指针是一种更好的方法,可以用惯用的C ++代码实现相同的效果。