<分区>
我想在一个函数中迭代一个数组。以下代码无法编译。
void printArr(int arr[])
{
for (auto x : arr)
{
cout << x << endl;
}
}
我知道 arr 实际上是指向第一个元素的指针。 感谢您的帮助。
<分区>
我想在一个函数中迭代一个数组。以下代码无法编译。
void printArr(int arr[])
{
for (auto x : arr)
{
cout << x << endl;
}
}
我知道 arr 实际上是指向第一个元素的指针。 感谢您的帮助。
最佳答案
原因是基于范围的循环需要数组类型、标准库容器或具有合适的begin
和end
迭代器的东西。在你的函数中,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/