# 面试题

### 什么是迭代器失效？

对于`vector`而言，添加和删除操作可能使容器的部分或者全部迭代器失效。那为什么迭代器会失效呢？`vector`元素在内存中是顺序存储，试想：如果当前容器中已经存在了10个元素，现在又要添加一个元素到容器中，但是内存中紧跟在这10个元素后面没有一个空闲空间，而`vector`的元素必须顺序存储一边索引访问，所以我们不能在内存中随便找个地方存储这个元素。**于是`vector`必须重新分配存储空间，用来存放原来的元素以及新添加的元素：存放在旧存储空间的元素被复制到新的存储空间里，接着插入新的元素，最后撤销旧的存储空间**。这种情况发生，一定会导致`vector`容器的所有迭代器都失效。

***

### 二叉树如何转换为森林？

若结点x是双亲y的左孩子，则把x的右孩子，右孩子的右孩子，…，都与y用连线连起来，最后去掉所有双亲到右孩子的连线。

![](images/algo_question_1.jpg)
