This question already has answers here:
Range based for-loop on array passed to non-main function
(2个答案)
5年前关闭。
我想迭代一个函数内的数组。以下代码无法编译。
我知道arr实际上是第一个元素的指针。
感谢您的帮助。
模板函数已用于允许不同长度的数组的地方。您还可以使元素类型成为模板参数:
(2个答案)
5年前关闭。
我想迭代一个函数内的数组。以下代码无法编译。
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/