1、for循环的一般写法:
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 0; i < 10; i++) cout << arr[i];
而遍历容器类的For如下:
std::vector<int> vec {1,2,3,4,5,6,7,8,9,10}; for (std::vector<int>::iterator itr = vec.begin(); itr != vec.end(); itr++) std::cout << *itr;
2、C++11中引入了这种方法也就是基于范围的For(Range-Based-For),用基于范围的For 改写上面两个例子:
std::vector<int> vec {1,2,3,4,5,6,7,8,9,10}; for (auto n :vec) std::cout << n; int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (auto n : arr) std::cout << n;
可以看到改写后的使用方法简单了很多,代码的可读性提升了一个档次,但是需要注意的在上述对容器的遍历是只读的,也就是说遍历的值是不可修改的,看下面例子:
std::vector<int> vec {1,2,3,4,5,6,7,8,9,10}; cout << "修改前" << endl; for (auto n :vec) std::cout << n++; cout << endl; cout << "修改后" << endl; for (auto j : vec) std::cout << j;
在上述例子中,我们首先遍历容器的内容,然后给容器内的元素每个都加1,然后再遍历一次容器的内容,示例的输出结果如下:
修改前 12345678910 修改后 12345678910
如果要遍历容器内的元素的同时又要修改元素的值该怎么做呢,方法就是将遍历的变量声明为引用类型,看下面例子:
std::vector<int> vec {1,2,3,4,5,6,7,8,9,10}; cout << "修改前" << endl; for (auto& n :vec) std::cout << n++; cout << endl; cout << "修改后" << endl; for (auto j : vec) std::cout << j;
代码的输出结果为:
修改前 12345678910 修改后 234567891011