c++ - 带指针的基于范围的循环

标签 c++ arrays loops

<分区>

我想在一个函数中迭代一个数组。以下代码无法编译。

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/

相关文章:

c++ - 每次保存后如何进行自动g++编译?

c - 如果我要重复引用它们,是否应该将 C 数组值存储在局部变量中?

python - 如何在列和行中同时进行循环以在数据帧的某些位置设置零?

c - 将原始索引存储在数组中

javascript - JS循环通过AJAX-response数组填充数组,如何获取数据?

php - 在用户未登录然后登录的情况下,将重复数据放入购物车很困难

c++ - 从给定的数字计算所有可能的数字

c++ - 如何构建简单的 OpenCV 程序

c++ - 深度复制 c++ - 如果给出指向该类的指针,则复制该类

javascript - 来自 URL 的正则表达式匹配数据在有两个匹配项时仅返回 1 个匹配项