-
分享
stl(vector)
-
小曾老师
SU
@
2025-6-26 14:52:17
以下是将 C++ std::vector
常用操作和与数组的区别整理成的 Markdown 格式文档:
C++ std::vector
常用操作指南
1. 包含头文件
#include <vector>
2. 声明与初始化
方式 |
示例 |
说明 |
空 vector |
std::vector<int> vec; |
创建空 vector |
指定大小 |
std::vector<int> vec(5); |
5 个元素,默认初始化为 0 |
指定大小和值 |
std::vector<int> vec(3, 10); |
3 个元素,每个初始值为 10 |
初始化列表 |
std::vector<int> vec = {1, 2, 3}; |
直接初始化元素 |
3. 元素访问
方式 |
示例 |
特性 |
下标 [] |
int val = vec[1]; |
无边界检查,越界导致未定义行为 |
at() 方法 |
int val = vec.at(1); |
有边界检查,越界抛出 std::out_of_range 异常 |
// at() 异常处理示例
try {
int value = vec.at(5); // 越界访问
} catch (const std::out_of_range& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
4. 元素添加
方法 |
示例 |
说明 |
push_back() |
vec.push_back(10); |
在末尾添加元素 |
insert() |
vec.insert(vec.begin() + 1, 5); |
在指定位置插入元素 |
5. 元素删除
方法 |
示例 |
说明 |
pop_back() |
vec.pop_back(); |
移除末尾元素 |
erase() |
vec.erase(vec.begin() + 2); |
移除指定位置元素 |
6. 大小与容量
方法 |
示例 |
说明 |
size() |
size_t len = vec.size(); |
返回实际元素数量 |
capacity() |
size_t cap = vec.capacity(); |
返回预分配内存大小 |
7. 遍历
方式 |
示例 |
说明 |
范围 for 循环 |
cpp<br>for (int num : vec) {<br> std::cout << num << " ";<br>} |
简洁语法(C++11 起) |
迭代器 |
cpp<br>for (auto it = vec.begin(); it != vec.end(); ++it) {<br> std::cout << *it << " ";<br>} |
灵活控制 |
std::vector
与数组的区别
特性 |
数组 |
std::vector |
大小灵活性 |
编译时固定大小
int arr[5]; |
运行时动态调整
vec.push_back(10); |
内存管理 |
手动管理堆内存
int* arr = new int[5];
delete[] arr; |
自动管理内存 动态扩容/缩容 |
边界检查 |
无检查
arr[10] → 未定义行为 |
支持安全访问
vec.at(10) → 抛出异常 |
功能丰富度 |
仅基础访问 |
丰富操作:
insert() , erase() , clear() 等 |
参数传递 |
退化为指针
void func(int arr[]) |
保留完整信息
void func(const std::vector<int>& v) |
关键区别详解
1. 动态扩展能力
// 数组:大小固定
int arr[3] = {1, 2, 3}; // 无法直接添加元素
// vector:动态扩展
std::vector<int> vec = {1, 2, 3};
vec.push_back(4); // 添加新元素 → {1, 2, 3, 4}
2. 安全访问
// 数组:越界无提示
int val = arr[10]; // 可能导致崩溃或数据损坏
// vector:安全检查
int val = vec.at(10); // 明确抛出 std::out_of_range
3. 函数传参
// 数组:丢失大小信息
void printArray(int arr[]) {
// 无法获取元素数量
}
// vector:保留完整信息
void printVector(const std::vector<int>& vec) {
for (auto& num : vec) { // 直接使用 size() 等成员
// ...
}
}