我们可以使用 for-each 循环遍历传递给函数的数组吗?

2024-01-08

我知道我们可以通过这种方式迭代作为参数传递的数组:

// NO ERROR
void fun(int *a, int n){
    for(int i=0; i<n; i++)
        cout<<a[i];
}

但是,有什么方法可以在这样的函数内使用 for-each 循环来迭代数组吗?

// ERROR
void fun(int *a, int n){
    for(auto x:a)
        cout<<x;
}

指针不是数组。如果将指向数组第一个元素的指针传递给函数,那么它不再是数组,而是指针。

您可以在以下情况下使用基于范围的循环:通过引用传递数组 https://stackoverflow.com/questions/5724171/passing-an-array-by-reference:

#include <iostream>

template <size_t N>
void foo(int (&x)[N]) {
    for (int i : x) std::cout << i << " ";
}

int main() {
    int x[] = {1,2,3};
    foo(x);
}

Output:

1 2 3 

这是可行的,因为基于范围的循环使用std::begin(x) and std::end(x)获取指向数组开头和结尾的迭代器。指针没有开始或结束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们可以使用 for-each 循环遍历传递给函数的数组吗? 的相关文章

随机推荐