C++11 for循环新用法
C++11基于范围的for循环
关于for循环我们已经很熟悉了,假设要遍历一个数组
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < 10; i++) {
std::cout << arr[i];
}
当需要遍历一个容器类时
std::vector<int> v {1,2,3,4,5,6,7,8,9,10};
for (std::vector<int>::iterator i = v.begin(); i != v.end(); i++) {
std::cout << *i;
}
我们需要给for循环指定开始值以及结束条件,C++11中引入了一种新的方式,可以不需要明确给出开始和结束条件的新语法
- 基于范围的for循环
可以将上面的两个循环改写成这样
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (auto i : arr) {
std::cout << i;
}
std::vector<int> v {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (auto i : v) {
std::cout << i;
}
改写后代码简洁了很多,可读性有了一定的提高
但是这样操作的遍历是只读的,也就是说不可以修改数组或是容器中的值,如果需要对值进行修改,需要将遍历时的变量声明为引用类型
std::vector<int> v {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (auto i : v) {
std::cout << i++;
}
std::for_each方法
改写上面的两个循环结构,同样可以用STL
标准库中提供的for_each
方法实现
需要包含头文件 #include<algorithm>
void func(int n) {
std::cout << n ;
}
std::vector<int> v {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::for_each(v.begin(), v.end(), func});