以下是将 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() 等成员
        // ...
    }
}

0 条评论

目前还没有评论...