【C++11】 基于范围的for循环

      在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来声明迭代的对象,那么这个对象不会是迭代器对象)。

猜你喜欢

转载自blog.csdn.net/yaotengjian/article/details/81545897