## 第3章 字符串、向量和数组
### 3.1 命名空间的using声明
头文件不应包含using声明。
### 3.2.2 string对象上的操作
在执行读取操作时,string对象会自动忽略开头的空白(不可见字符)并从第一个可见字符开始读起,直到遇见下一处空白为止。
### 3.3.2 向vector对象中添加元素
范围for语句体内不应改变其所遍历序列的大小。
### 3.3.3 其他vector操作
vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能用于添加元素。
### 3.4.1 使用迭代器
为了专门得到const_iterator类型的返回值,C++11新标准引入了两个新函数,分别是**cbegin**和**cend**。
---
任何一种可能改变vector对象容量的操作,都会使该vector对象的迭代器失效。
### 3.4.2 迭代器运算
```cpp
/* 练习3.26 —— 迭代器不支持两个对象相加的运算 */
mid = beg + (end - beg) / 2; //正确
mid = (beg + end) / 2; //错误
```
### 3.5 数组
- 定义数组的时候必须指定数组的类型,不允许用**auto**关键字由初始值的列表推断类型。
- 不能将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。
### 3.5.2
```cpp
unsigned scores[num] = {}; //num个元素,全部初始化为0
```
### 3.5.3
当数组作为一个**auto**变量的初始值时,推断得到的类型是指针而非数组。使用**delctype**则不会发生这种转换。
### 3.5.5
允许使用数组初始化vector对象,只需指明要拷贝区域的首元素地址和尾后地址就可以了。
### 3.6 多维数组
要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。