c++ vector增长原理
时间: 2023-08-26 20:17:05 浏览: 99
在 C++ 中,`std::vector` 是一个动态数组,它可以根据需要动态增长和收缩。当向 `std::vector` 中添加元素时,如果当前容量不足以容纳新元素,`std::vector` 会自动分配更多的内存空间来存储新元素。
`std::vector` 增长的原理如下:
1. 初始状态:`std::vector` 在创建时具有一个初始容量(通常为0),并且不占用任何内存。
2. 添加元素:当向 `std::vector` 中添加元素时,如果当前容量不足以容纳新元素,`std::vector` 会分配一个更大的内存块,并将现有元素复制到新的内存块中。
3. 容量增长策略:`std::vector` 通常会分配一个较大的内存块来容纳新元素,以减少频繁重新分配内存的次数。它可以使用两种常见的策略来决定新内存块的大小:
- 增倍策略(倍增策略):每次需要增长时,将当前容量乘以一个固定的倍数(如2),以获得新的容量。
- 增加固定大小:每次需要增长时,将当前容量增加一个固定的大小(如一定数量的元素),以获得新的容量。
4. 容量调整:当 `std::vector` 中的元素被删除时,如果剩余元素的数量较少,`std::vector` 可能会自动收缩其内存空间,以节省内存。然而,`std::vector` 不会缩小到小于其初始容量的大小。
需要注意的是,`std::vector` 的动态增长可能导致内存重新分配和元素复制,这可能影响性能。如果事先知道 `std::vector` 的最大可能大小,可以使用 `reserve()` 函数预先分配足够的容量,以避免不必要的内存重新分配。
阅读全文