带有指针的基于范围的循环
Range based loops with pointers
我想在函数内迭代一个数组。 以下代码无法编译。
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])
{
....
这是因为数组参数耗尽为指针,并且基于范围的循环需要数组或容器类型。您可以改为尝试以下代码:
template <typename T, size_t sz>
void printArr(const T (&arr)[sz])
{
for (auto x : arr)
{
cout << x << endl;
}
}
现场演示在这里
此代码传递数组的引用而不是地址。
相关文章:
- 基于范围循环到旧编译器的旧样式
- 带有自定义对象的C 范围循环
- 为什么编译器不优化集合元素上的空范围循环?
- 迭代在包含向量的vor in for for范围循环中迭代
- 我们可以在范围循环中使用引用(而不是指针)上的删除
- 如何实现我的自定义范围循环
- C++范围循环
- GCC 4.4 不实现 C++11 范围循环.它还支持哪些其他范围循环语法
- 嵌套c++11范围循环,用于查找组合
- 范围循环中的访问索引
- 对于不可复制类型的范围循环,是否可能
- 我的范围循环出现逻辑错误
- 如何在我的类上允许范围循环
- c++的范围循环比递减循环快
- 通过范围循环从指针容器中获取取消引用元素的引用
- c++ 11:为什么这个范围循环会使FPS下降35
- 带有自定义类的范围循环(矢量的简单版本<string>,使用分配器)
- MSVC10 Visual Studio 2010支持c++范围循环吗?
- 围绕 2 的幂范围循环变量
- toupper() 在 for 范围循环中不起作用