欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

相关标签: C 11 for