什么是Vector?

Vector是C++标准模板库(STL)中最常用的容器之一,可以简单理解为动态数组

大白话解释:Vector就像一个能自动伸缩的智能数组。你不需要预先知道要存多少数据,它会根据你的需要自动调整大小。

为什么使用Vector?

  • 🏆 动态大小:不像普通数组需要固定大小,vector可以随时增长或缩小
  • 🔒 安全访问:提供了边界检查(使用at()方法)
  • 高效操作:在尾部添加/删除元素非常高效
  • 🧩 丰富功能:内置多种实用方法(排序、查找、遍历等)
  • 🧠 自动内存管理:不需要手动分配和释放内存

Vector的基本使用

1. 包含头文件

#include <vector> // 使用vector必须包含此头文件

2. 创建Vector

using namespace std; // 省略std::前缀 // 创建不同类型的vector vector<int> nums; // 创建空的int类型vector vector<string> names; // 创建空的string类型vector vector<int> values(10); // 创建包含10个元素的vector,默认值为0 vector<int> prices {5, 10, 15}; // 创建并初始化vector

3. 添加元素

vector<int> vec; // 在末尾添加元素 vec.push_back(10); // vec: [10] vec.push_back(20); // vec: [10, 20] vec.push_back(30); // vec: [10, 20, 30] // 在指定位置插入元素 vec.insert(vec.begin(), 5); // 在开头插入: [5, 10, 20, 30] vec.insert(vec.begin() + 2, 15); // 在索引2处插入: [5, 10, 15, 20, 30]

访问Vector元素

1. 使用索引访问

vector<int> vec = {10, 20, 30, 40}; // 像数组一样用[]访问 int first = vec[0]; // 10 int third = vec[2]; // 30 // 使用at()方法(带边界检查) int last = vec.at(vec.size() – 1); // 40 // 访问第一个和最后一个元素 int front = vec.front(); // 10 int back = vec.back(); // 40

⚠️ 注意:使用[]访问时,如果索引超出范围,程序可能会崩溃或产生未定义行为。使用at()会抛出异常,更安全。

2. 遍历Vector

vector<int> numbers = {1, 2, 3, 4, 5}; // 方法1: 使用索引遍历 for (int i = 0; i < numbers.size(); i++) { cout << numbers[i] << ” “; } // 方法2: 使用迭代器遍历 for (auto it = numbers.begin(); it != numbers.end(); it++) { cout << *it << ” “; } // 方法3: 使用范围for循环 (C++11及以上) for (int num : numbers) { cout << num << ” “; }

修改和删除元素

1. 修改元素

vector<int> nums = {10, 20, 30, 40}; nums[1] = 25; // [10, 25, 30, 40] nums.at(2) = 35; // [10, 25, 35, 40]

2. 删除元素

vector<int> nums = {10, 20, 30, 40, 50}; // 删除最后一个元素 nums.pop_back(); // [10, 20, 30, 40] // 删除指定位置的元素 nums.erase(nums.begin() + 1); // 删除索引1处的元素: [10, 30, 40] // 删除一个范围内的元素 nums.erase(nums.begin(), nums.begin() + 2); // 删除前两个元素: [40] // 清空整个vector nums.clear(); // []

Vector的大小和容量

理解size和capacity的区别很重要:

  • size:当前vector中实际存储的元素数量
  • capacity:vector在内存中分配的空间大小(可容纳的元素数量)

相关方法

vector<int> vec; // 添加一些元素 for (int i = 0; i < 10; i++) { vec.push_back(i); } cout << “大小: “ << vec.size(); // 10 cout << “容量: “ << vec.capacity(); // 通常是16(取决于编译器实现) cout << “是否为空: “ << vec.empty(); // 0 (false) // 调整大小 vec.resize(15); // 大小变为15,新增元素初始化为0 vec.resize(5); // 大小变为5,删除多余元素 // 预留空间(避免多次重新分配) vec.reserve(100); // 容量至少为100,但大小不变
10
20
30
容量:5 | 大小:3

Vector常用方法总结

方法 描述 时间复杂度
push_back() 在末尾添加元素 平均O(1)
pop_back() 删除末尾元素 O(1)
insert() 在指定位置插入元素 O(n)
erase() 删除指定位置元素 O(n)
size() 返回元素数量 O(1)
capacity() 返回当前容量 O(1)
empty() 检查是否为空 O(1)
clear() 清空所有元素 O(n)
resize() 改变大小 O(n)
reserve() 预留空间 O(n)