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

标签 c++ arrays loops foreach

我知道,我们可以以这种方式遍历作为参数传递的数组:

    //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;
    }

最佳答案

指针不是数组。如果将指向数组第一个元素的指针传递给函数,则它不再是数组,而是指针。
您可以在pass the 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);
}
输出:
1 2 3 
这是可行的,因为基于范围的循环使用std::begin(x)std::end(x)将迭代器获取到数组的开头和结尾。指针没有开始或结束。

关于c++ - 我们可以使用for-each循环遍历传递给函数的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66491831/

相关文章:

c++ - 具有必要副作用的静态初始化被优化掉

c++ - 设置一个 C 风格的数组,模板函数接受回调

C - 初始化结构成员 - 指针数组。第二个元素的值不正确

javascript - 如何查找 JavaScript 数组中元素的所有组合

php - 如何使用 PHPExcel 合并 Excel 中的列

带有字符和数字的 C# 循环

c++ - Ncurses 窗口不显示任何内容

c++ - 在派生类中重载新运算符

java - 如何使用 swig 将 wchar_t 数组转换为 java 的字节数组?

java - 具有静态最终限制的数组迭代