C++ STL std::vector的实现机制【面试】
std::vector 是 C++ 标准模板库(STL)中的一种序列容器,它封装了动态数组的实现,提供了一系列方法来操作这个动态数组。以下是 std::vector 的一些关键实现机制:
-
连续内存存储: std::vector 通过一块连续的内存空间来存储其元素,这使得通过索引访问元素非常高效。
-
动态扩容: 当添加元素超过当前容量时,vector 会自动扩容。这通常涉及到申请更大的内存块,将现有元素复制或移动到新内存,然后释放旧内存。
-
容量与大小: vector 区分了 size(当前元素数量)和 capacity(不重新分配内存时可以存储的元素数量)。capacity 总是大于或等于 size。
-
增长策略: 为了减少因扩容导致的性能损耗,vector 通常采用增长策略,如每次扩容时容量翻倍,以减少扩容次数。
-
迭代器: vector 提供了迭代器,支持对容器元素的遍历,包括随机访问迭代器,允许快速访问任何位置的元素。
-
元素操作: vector 提供了在尾部快速添加(push_back)和删除(pop_back)元素的操作。对于非尾部的插入和删除,可能需要移动后续所有元素,因此相对较慢。
-
内存管理: vector 自动管理内存,包括在扩容时申请内存和在元素销毁后释放内存。
-
异常安全: vector 的操作考虑到了异常安全,例如,在 push_back 操作中,如果元素构造或复制过程中抛出异常,vector 会保持不变。
-
模板类: vector 是一个模板容器,可以存储任意类型的元素,包括自定义类型。
-
构造和析构:std::vector 在元素被添加时构造它们,在元素被移除或容器被销毁时析构它们。