码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-07-27 22:20:25      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:声明   ++   一个   highlight   容器类   c++11   新特性   类型   输出   

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

 

  

  

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

标签:声明   ++   一个   highlight   容器类   c++11   新特性   类型   输出   

原文地址:https://www.cnblogs.com/xuelisheng/p/9379835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!