C++ 关于基于范围的for循环(C++11) 语法 详解

范围for的语法

C++98 中如果要遍历一个数组
void TestFor()
{
int array[] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
     array[i] *= 2;
for (int* p = array; p < array + sizeof(array)/ sizeof(array[0]); ++p)
     cout << *p << endl;
}
对于一个 有范围的集合 而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。C++11中引入了基于范围的 for 循环。
for 循环后的括号由冒号 分为两部分:第一部分是范 围内用于迭代的变量,第二部分则表示被迭代的范围
void TestFor()
{
int array[] = { 1, 2, 3, 4, 5 };
for(auto& e : array)       想要改变数组数据
                            必须使用引用,x是数组每个元素的别名,x的改变会影响数组
     e *= 2;
for(auto e : array)
     cout << e << " ";
return 0;
}
与普通循环类似,可以用 continue 来结束本次循环,也可以用 break 来跳出整个循环

范围for的使用条件

1. for循环迭代的范围必须是确定的

对于数组而言,就是数组中第一个元素和最后一个元素的范围 ;对于类而言,应该提供
begin end 的方法, begin end 就是 for 循环迭代的范围。
以下代码就有问题,因为 for的范围不确定
也可以说 函数的形参没有数组的概念,不能把形参定为数组,应是指针
C++ 关于基于范围的for循环(C++11) 语法 详解_第1张图片

使用

int main()
{
	int array[] = { 1, 2, 3, 4, 5 };

	for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
		array[i] *= 2;  //每个值×2

	for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
		cout << array[i] << " ";
	cout << endl;


	for (auto& x : array)   想要改变数组数据
                            必须使用引用,x是数组每个元素的别名,x的改变会影响数组
	{
		x *= 2;  每个值×2
	}

	 范围for
	 依次取数组中的数据赋值给e
	 自动判断结束
	 自动迭代
	for (auto e : array)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

2. 迭代的对象要实现++==的操作

你可能感兴趣的:(C/C++/数据结构笔记,c++,开发语言)