【C++11】 基于范围的for循环
程序员文章站
2024-03-25 15:27:46
...
在C++中,循环的方式有很多种,下面给上简单的例子讲解基于范围的for循环:
遍历一个数组:
1、普通方法遍历数组:
int main()
{
int array[] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
array[i] *= 3;
for (int* p = array; p < array + sizeof(array)/ sizeof(array[0]); ++p)
cout << *p << endl;
system("pause");
return 0;
}
2、使用STL标准库里面的for_each算法:
///STL标准库中的for_each算法:
void action1(int& data)
{
data *= 2;
}
void action2(const int& data)
{
cout << data << " ";
}
int main()
{
int array[] = { 1, 2, 3, 4, 5 };
for_each(array, array + sizeof(array) / sizeof(array[0]), action1);
for_each(array, array + sizeof(array) / sizeof(array[0]), action2);
system("pause");
return 0;
}
3、基于范围的for循环:
//C++11中的基于范围的for循环
int main()
{
int array[] = { 1,2,3,4,5 };
for (auto& e : array)
e *= 2;
for (auto e : array)
cout << e << " ";
system("pause");
return 0;
}
for循环后的括号有冒号”:”分为两部分,第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。它与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环。
使用for循环的条件:
for循环迭代的范围是确定的。迭代的对象要实现++和==操作符。
int main()
{
vector<int> v{ 1, 2, 3, 4, 5 };
for (auto it = v.begin(); it != v.end(); ++it)
cout << *it << " "; // it 为迭代器类型
cout << endl;
for (auto e : v)
cout << e << " "; // e 为解引用后的对象
cout << endl;
system("pause");
return 0;
}
总结:
基于范围的for循环的作用:遍历修改数组,容器
缺点:违背传统C的用法,可读性上的误区。
使用for循环的条件:
1、for循环迭代的范围是确定的(对于数组而言就是数组第一个元素和最后一个元素的范围;对于类来说,应该提供begin和end方法,begin和end就是for循环迭代的范围)
2、迭代的对象要实现++和==操作符(注意:基于范围的for循环使用于标准库的容器时,如果使用auto来声明迭代的对象,那么这个对象不会是迭代器对象)。