C++ 标准库中的 std::vector
类型,它是一个动态数组,可以动态增长和缩小,即我们可以动态的输入而不需要预先分配好固定大小。
其扩容步骤为:
-
检查容量是否足够: 在插入元素之前,
std::vector
会检查当前元素数量是否超过了容量(capacity)。如果超过了容量,就需要进行扩容操作。 -
计算新容量: 计算新的容量,通常是当前容量的两倍或某个固定的增长因子。这是为了减少频繁扩容的次数,提高性能。
-
分配新内存: 分配新的内存空间,大小为新容量。
-
拷贝元素: 将原来的元素拷贝到新的内存空间中。
-
释放旧内存: 释放原来的内存空间。
普通数组在传入函数时只是传入了数组的首地址,通过对地址的偏移来实现访问,所以传入普通数组时在函数中无法求得知数组元素个数,即一般还需传入元素个数。而当通过引用传递一个容器类(比如 std::vector
)时,你可以使用容器的成员函数,比如 size()
来求得数组元素个数,因为引用并不改变原始对象的性质,而是提供了对原始对象的访问。