普通的for循环都是如下:
int a[] = {1, 2, 3, 4, 5};
for (int i = 0; i < sizeof(a) / sizeof(*a); ++i) {
cout << "a[" << i << "]" << a[i] << endl;
}
而c++11 基于范围的for循环是怎么样的呢:例子如下:
//基于范围的for循环
for (int &tmp : a) {
cout << "tmp " << tmp << endl;
}
发现实现同样的功能,基于范围的for循环代码更加简洁
但也要注意如下问题:
#include <iostream>
using namespace std;
//形参中的数组,不是数组,是指针变量,无法确认元素个数
void func(int a[]) {
//error 基于范围的for循环 ,这个范围是确定的否则无法使用。
for (auto p : a) {
cout << p << endl;
}
}
int main() {
int a[] = {1, 2, 3, 4, 5};
//基于范围的for循环
for (int &tmp : a) {
cout << "tmp " << tmp << endl;
}
return 0;
}
上面的代码块 func 函数编译不过,原因是因为 基于范围的for循环,这个范围需要是确定的,然而func中的函数形参,不是数组,是指针变量,无法确定元素的个数,所以,无法编译过