【校招面试 之 C/C++】第32题 C++ 11新特性(三)之for关键字

1、for循环的一般写法:

int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < 10; i++)
	cout << arr[i];

而遍历容器类的For如下:

std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};
for (std::vector<int>::iterator itr = vec.begin(); itr != vec.end(); itr++)
	std::cout << *itr;

2、C++11中引入了这种方法也就是基于范围的For(Range-Based-For),用基于范围的For 改写上面两个例子:

std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};
for (auto n :vec)
	std::cout << n;
 
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (auto n : arr)
	std::cout << n;

可以看到改写后的使用方法简单了很多,代码的可读性提升了一个档次,但是需要注意的在上述对容器的遍历是只读的,也就是说遍历的值是不可修改的,看下面例子:  

std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};
cout << "修改前" << endl;
for (auto n :vec)
	std::cout << n++;
 
cout << endl;
cout << "修改后" << endl;
for (auto j : vec)
	std::cout << j;

在上述例子中,我们首先遍历容器的内容,然后给容器内的元素每个都加1,然后再遍历一次容器的内容,示例的输出结果如下:

修改前
12345678910
修改后
12345678910

如果要遍历容器内的元素的同时又要修改元素的值该怎么做呢,方法就是将遍历的变量声明为引用类型,看下面例子:

std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};
cout << "修改前" << endl;
for (auto& n :vec)
	std::cout << n++;
 
cout << endl;
cout << "修改后" << endl;
for (auto j : vec)
	std::cout << j;

代码的输出结果为:

修改前
12345678910
修改后
234567891011

  

  

猜你喜欢

转载自www.cnblogs.com/xuelisheng/p/9379835.html
今日推荐