我知道我们可以通过这种方式迭代作为参数传递的数组:
// 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;
}
指针不是数组。如果将指向数组第一个元素的指针传递给函数,那么它不再是数组,而是指针。
您可以在以下情况下使用基于范围的循环:通过引用传递数组 https://stackoverflow.com/questions/5724171/passing-an-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);
}
Output:
1 2 3
这是可行的,因为基于范围的循环使用std::begin(x)
and std::end(x)
获取指向数组开头和结尾的迭代器。指针没有开始或结束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)