面试题答案
一键面试- 扩容触发条件:
- 当
vector
的元素数量(size()
)达到容量(capacity()
)时,若再执行插入操作(如push_back
等),就会触发扩容。这是因为当前分配的内存空间已不足以容纳新元素。
- 当
- 内存重新分配与数据迁移过程:
- 内存重新分配:
vector
会重新分配一块更大的内存空间。通常,新的容量是原容量的2倍(不同编译器实现可能略有差异,但一般是倍数增长,这样可以减少重新分配内存的频率,降低时间复杂度)。例如,原容量为4,当触发扩容时,新容量可能变为8。- 使用
operator new
等机制在堆上分配这块新的更大的内存。
- 数据迁移:
- 通过
memcpy
或逐个元素拷贝(对于有复杂构造析构函数的对象,采用逐个元素拷贝构造)的方式,将原vector
中的数据从旧内存空间迁移到新分配的内存空间。 - 迁移完成后,释放原有的旧内存空间(通过
operator delete
)。
- 通过
- 更新相关信息:
vector
会更新其内部记录的容量(capacity
)和大小(size
)信息,使其反映新的内存状况和元素数量。
- 内存重新分配: