一、什么是 std::vector?
std::vector 是 C++ STL 中的一种序列容器,它类似于传统的数组,但具有动态扩展和收缩的能力。与普通数组相比,std::vector 的大小可以在运行时动态变化,而普通数组的大小在定义时就已经确定,无法改变。std::vector 的底层实现是一个连续的内存块,这使得它在随机访问元素时非常高效,类似于数组的访问速度。
二、std::vector 的基本特性
(一)动态扩展
std::vector 的最大特点是动态扩展。当向 std::vector 中添加元素,而当前分配的内存空间不足以容纳更多元素时,std::vector 会自动分配更大的内存空间,并将原有元素复制到新的内存中。这个过程虽然涉及到内存分配和数据复制,但 std::vector 会尽量优化,通常会分配比当前需要更多的空间,以减少后续的扩展次数。
(二)随机访问
由于 std::vector 的底层是连续的内存块,因此它支持随机访问。可以通过下标(operator[] 或 at())快速访问任意位置的元素,时间复杂度为 O(1)。这使得 std::vector 在需要频繁随机访问元素的场景中非常高效。
(三)内存管理
std::vector 会自动管理内存。当向 std::vector 中添加或删除元素时,它会自动调整内存的分配和释放。此外,std::vector 提供了一些方法来控制内存的分配策略,例如 reserve() 方法可以预先分配足够的内存,从而减少动态扩展的次数,提高性能。
三、std::vector 的基本操作
(一)定义和初始化
std::vector 可以通过多种方式定义和初始化。以下是一些常见的定义方式:
#include <vector>
// 定义一个空的 vector
std::vector<int> vec1;
// 使用初始化列表初始化
std::vector<int> vec2 = {1, 2, 3, 4, 5};
// 使用默认值初始化
std::vector<int> vec3(10, 0); // 10 个元素,初始值为 0
// 复制构造
std::vector<int> vec4(vec2);
// 从另一个 vector 的一部分构造
std::vector<int> vec5(vec2.begin() + 1, vec2.end() - );


