1. 基本用法
#include <vector>
#include <iostream>
int main() {
// 创建空vector
std::vector<int> vec1;
// 创建含5个元素的vector,初始值为0
std::vector<int> vec2(5);
// 创建含3个元素的vector,初始值都为10
std::vector<int> vec3(3, 10);
// 使用初始化列表
std::vector<int> vec4 = {1, 2, 3, 4, 5};
return 0;
}
2. 常用操作
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3};
// 添加元素
vec.push_back(4); // 末尾添加
vec.insert(vec.begin() + 1, 5); // 在指定位置插入
// 访问元素
int first = vec[0]; // 不检查边界
int second = vec.at(1); // 检查边界,越界抛出异常
// 删除元素
vec.pop_back(); // 删除末尾元素
vec.erase(vec.begin() + 1); // 删除指定位置元素
// 获取大小
int size = vec.size();
bool isEmpty = vec.empty();
// 清空vector
vec.clear();
return 0;
}
3. 遍历vector
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 方法1: 使用下标
for(size_t i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
// 方法2: 使用迭代器
for(auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
// 方法3: 范围for循环
for(int num : vec) {
std::cout << num << " ";
}
return 0;
}
4. 二维vector
#include <vector>
#include <iostream>
int main() {
// 创建3x4的二维vector,初始值为0
std::vector<std::vector<int>> matrix(3, std::vector<int>(4));
// 初始化二维vector
std::vector<std::vector<int>> mat = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 访问元素
int val = mat[1][2]; // 获取第2行第3列元素
// 遍历二维vector
for(const auto& row : mat) {
for(int num : row) {
std::cout << num << " ";
}
std::cout << std::endl;
}
return 0;
}
5. 常用成员函数
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3};
// 获取首尾元素
int front = vec.front();
int back = vec.back();
// 容量相关
vec.reserve(100); // 预留空间
int capacity = vec.capacity();
// 调整大小
vec.resize(5); // 新元素初始化为0
vec.resize(8, 10); // 新元素初始化为10
// 交换两个vector
std::vector<int> other = {4, 5, 6};
vec.swap(other);
return 0;
}
6. assign() 方法
重新赋值:
assign() 方法允许用指定的值或范围来重新填充整个 vector,这在需要重置容器内容时很有用。
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3};
// 使用 assign() 重置 vector 的内容为 5 个 10
vec.assign(5, 10);
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
7. 获取底层数组指针
data() 成员函数:
vector::data() 返回指向连续存储数组的指针,方便与 C 风格数组互操作或传递给需要指针的 API。
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
int* arr = vec.data();
// 输出底层数组的内容
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << arr[i] << " ";
}
return 0;
}
8. 反向迭代器
反向遍历:
std::vector 提供了 rbegin() 和 rend() 成员函数,可以从尾部开始遍历容器。
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 反向遍历 vector
for (auto rit = vec.rbegin(); rit != vec.rend(); ++rit) {
std::cout << *rit << " ";
}
return 0;
}
9. emplace 系列函数
emplace_back() 和 emplace():
从 C++11 开始,std::vector 支持 emplace_back 和 emplace 函数,可以直接在容器尾部或指定位置构造对象,减少不必要的拷贝或移动操作。
#include <vector>
#include <iostream>
struct Person {
std::string name;
int age;
Person(const std::string& n, int a) : name(n), age(a) {}
};
int main() {
std::vector<Person> people;
// 使用 emplace_back 直接构造 Person 对象
people.emplace_back("Alice", 30);
people.emplace_back("Bob", 25);
for (const auto& p : people) {
std::cout << p.name << " (" << p.age << ")" << std::endl;
}
return 0;
}
关键特性:
- 动态数组,自动管理内存
- 随机访问时间复杂度:O(1)
- 尾部插入/删除:平均O(1)
- 中间插入/删除:O(n)
- 需要包含头文件
<vector>