1. 什么是vector?
vector是C++标准模板库(STL)中最常用的序列容器之一,它封装了动态大小的数组。简单来说,vector就是一个能够自动管理内存的动态数组。与普通数组相比,vector最大的优势在于它能够根据需要自动扩展和收缩容量。
在实际开发中,我经常使用vector来替代原生数组,因为它提供了更安全、更方便的操作方式。比如,我们不用担心越界访问的问题(可以使用at()方法进行边界检查),也不用手动管理内存的分配和释放。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. vector的核心特性
2.1 动态扩容机制
vector最强大的特性就是它的动态扩容能力。当我们向vector中添加元素时,如果当前容量不足,它会自动分配更大的内存空间。这个扩容过程通常是按照一定的策略进行的(比如常见的倍增策略)。
cpp复制std::vector<int> v;
for(int i=0; i<100; ++i) {
v.push_back(i);
std::cout << "Size: " << v.size()
<< ", Capacity: " << v.capacity() << std::endl;
}
这段代码会展示vector如何随着元素增加而扩容。在实际项目中,如果我们预先知道要存储的元素数量,可以使用reserve()方法来避免频繁扩容带来的性能损耗。
2.2 连续内存存储
vector的元素在内存中是连续存储的,这意味着:
- 可以通过指针算术直接访问元素
- 缓存友好,访问效率高
- 可以像数组一样直接传递给C风格的函数
cpp复制std::vector<int> vec = {1,2,3,4,5};
int* p = vec.data(); // 获取底层数组指针
3. vector的基本操作
3.1 创建和初始化vector
vector提供了多种初始化方式:
cpp复制// 空vector
std::vector<int> v1;
// 指定初始大小
std::vector<int> v2(10); // 10个0
// 指定大小和初始值
std::vector<int> v3(10, 5); // 10个5
// 通过初始化列表
std::vector<int> v4 = {1,2,3,4,5};
// 通过迭代器范围
int arr[] = {1,2,3};
std::vector<int> v5(arr, arr+3);
3.2 元素访问
vector提供了多种访问元素的方式:
cpp复制std::vector<int> v = {10,20,30,40};
// 使用operator[]
int a = v[1]; // 20
// 使用at()方法(会检查边界)
int b = v.at(2); // 30
// 访问首尾元素
int front = v.front(
