【校招面试 之 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
【校招面试 之 C/C++】第32题 C++ 11新特性(三)之for关键字的更多相关文章
- 【校招面试 之 C/C++】第33题 C++ 11新特性(四)之STL容器
		C++ 11新增array.forward_list(单链表).unordered_set.unordered_map集中容器. 
- 【校招面试 之 C/C++】第31题 C++ 11新特性(二)之nullptr关键字
		1. 引入nullptr的原因 引入nullptr的原因,这个要从NULL说起.对于C和C++程序员来说,一定不会对NULL感到陌生.但是C和C++中的NULL却不等价.NULL表示指针不指向任何对象 ... 
- 【校招面试 之 C/C++】第30题 C++ 11新特性(一)之auto关键字
		1.自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型.通过auto的自动类型推断,可以大大简化我们的编程工作.下面是一些使用auto的例子. #include <ve ... 
- 【校招面试 之 网络】第3题 HTTP请求行、请求头、请求体详解
		1.HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE.HEA ... 
- 【校招面试 之 网络】第1题 TCP和UDP
		TCP UDP1.TCP与UDP基本区别 (1)基于连接与无连接 (2)TCP要求系统资源较多,UDP较少: (3)UDP程序结构较简单(头只有8个字节:源端口号.目标端口号.长度.差错) ... 
- 【校招面试 之 网络】第2题 TCP的可靠传输、流量控制、滑动窗口
		1.可靠传输 (1)三次握手 TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接: (1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_S ... 
- 前端面试经典题之ES6新特性
		ES6 主要是为了解决 ES5 的先天不足,在原先ES5的基础上新增了许多内容,本篇文章将列举出ES6中新增的10大特性. 一. let 和 const 与var不同,let和const都是用于命名局 ... 
- 一次电话Java面试的问题总结(JDK8新特性、哈希冲突、HashMap原理、线程安全、Linux查询命令、Hadoop节点)
		面试涉及问题含有: Java JDK8新特性 集合(哈希冲突.HashMap的原理.自动排序的集合TreeSet) 多线程安全问题 String和StringBuffer JVM 原理.运行流程.内部 ... 
- 剑指offer 面试32题
		面试32题: 题目:从上到下打印二叉树 题:不分行从上到下打印二叉树 解题代码: # -*- coding:utf-8 -*- # class TreeNode: # def __init__(sel ... 
随机推荐
- MySQL5.7 查询用户,配置IP限制
			1) MySQL 查询现在所有用户 select host,user from user; Navicat点击用户标签 查询;2) GRANT ALL PRIVILEGES ON *.* TO 'em ... 
- 使用linux的shell脚本实现在当前行重复动态显示时间等字符串信息(不另起新行)
			###本脚本在Suse11sp2当中验证正确 #!/bin/sh )) do echo -ne "\r$(date)" sleep 0.3 done ###关键在 echo 的 & ... 
- RACSignal常见用法
			RACSignal 两种用法, 1:异步操作,一般创建signal的时候写逻辑,然后通过subscribeNext拿到异步执行的结果 2:监听的属性的变化,及时给出回应,一般赋值的时候用RACObse ... 
- Delphi TQuery 的Locate用法
			Help里的解释 function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions) ... 
- 3.SLB 回话保持功能分析
			参考文档: 七层会话保持 配置服务器Cookie会话保持常见问题四层监听 
- img标签在div里上下居中
			方法一:图片尺寸未知,IE8-不支持 CSS部分: <style> .content{ width:500px; height:500px; border:1px solid black; ... 
- APP发行渠道
			1,安卓APP发行:google play,原名android store 2,IOS APP: apple store 3,国内各大平台,应用宝,360,小米,华为 ... 
- 收藏点webservice接口
			商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebSe ... 
- stringBuffer和stringBulider的区别
			今天去面试了,问了最基础的stringBuffer和stringBulider的区别,我没有回答出来.之前就知道自己的基础很差,没想到这么差. 网上看了一下资料,stringBuffer和string ... 
- jekins的一些配置
			GotPC_Excel_Branches丢弃旧的构建 svn http://devsvn.uuzuonline.com/GOT_PC_PRIVATE/config/trunk构建Execute she ... 
