【cpp Trip第1栈】vector
C++ vector 常用用法大全
vector 是 C++ 标准模板库(STL)中的一个动态数组容器,它能够自动管理内存,支持快速随机访问。以下是 vector 的常用用法:
1. 基本操作
创建和初始化
#include
using namespace std;
vector v1; // 空vector
vector v2(5); // 包含5个元素,默认值为0
vector v3(5, 10); // 包含5个元素,每个都是10
vector v4 = {1, 2, 3}; // 列表初始化
vector v5(v4); // 拷贝构造
vector v6(v5.begin(), v5.end()); // 通过迭代器范围构造
访问元素
v[0] = 10; // 使用下标访问(不检查边界)
v.at(1) = 20; // 使用at()访问(会检查边界,越界抛出异常)
int first = v.front(); // 访问第一个元素
int last = v.back(); // 访问最后一个元素
int* data = v.data(); // 获取指向底层数组的指针
容量操作
bool isEmpty = v.empty(); // 判断是否为空
size_t size = v.size(); // 获取元素数量
size_t cap = v.capacity(); // 获取当前容量
v.reserve(100); // 预留空间,避免多次重新分配
v.shrink_to_fit(); // 减少容量以适应大小
2. 修改操作
添加元素
v.push_back(10); // 在末尾添加元素
v.emplace_back(20); // 在末尾构造元素(更高效)
v.insert(v.begin(), 5); // 在指定位置插入元素
v.insert(v.begin(), 3, 5); // 在指定位置插入多个相同元素
v.insert(v.begin(), {1,2,3}); // 插入初始化列表
删除元素
v.pop_back(); // 删除最后一个元素
v.erase(v.begin()); // 删除指定位置的元素
v.erase(v.begin(), v.begin()+2); // 删除范围内的元素
v.clear(); // 清空所有元素
调整大小
v.resize(10); // 调整大小为10,新增元素默认初始化
v.resize(15, 5); // 调整大小为15,新增元素初始化为5
3. 迭代器操作
// 正向迭代器
for(auto it = v.begin(); it != v.end(); ++it) {
cout << *it << " ";
}
// 反向迭代器
for(auto it = v.rbegin(); it != v.rend(); ++it) {
cout << *it << " ";
}
// 常量迭代器
for(auto it = v.cbegin(); it != v.cend(); ++it) {
// *it = 10; // 错误,不能修改
}
4. 算法操作
vector 可以与 STL 算法配合使用:
#include
sort(v.begin(), v.end()); // 排序
reverse(v.begin(), v.end()); // 反转
auto it = find(v.begin(), v.end(), 10); // 查找元素
int cnt = count(v.begin(), v.end(), 5); // 计数
5. 二维和多维 vector
vector<vector> matrix(5, vector(5)); // 5x5矩阵
// 初始化二维vector
vector<vector> mat = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 访问元素
int val = mat[1][2]; // 获取第2行第3列元素
6. 性能优化技巧
// 预先分配足够空间避免多次重新分配
vector v;
v.reserve(1000);
// 使用emplace_back代替push_back避免临时对象
v.emplace_back(10); // 比 v.push_back(10) 更高效
// 移动语义减少拷贝
vector v2 = std::move(v1); // v1的资源被移动到v2
7. 其他有用操作
// 交换两个vector
vector v1 = {1, 2, 3};
vector v2 = {4, 5, 6};
v1.swap(v2);
// 比较两个vector
if(v1 == v2) {
// 只有当所有元素都相等时才为true
}
// 获取最大可能的大小
size_t max_size = v.max_size();
vector 是 C++ 中最常用的容器之一,它提供了动态数组的功能,同时保持了数组的随机访问效率。掌握这些常用操作可以大大提高编程效率。