【c 中vector的用法详解】在 C++ 编程中,`vector` 是一个非常常用且功能强大的容器类,属于标准模板库(STL)的一部分。它提供了动态数组的功能,可以方便地进行元素的增删改查操作。本文将对 `vector` 的基本用法、常见操作和注意事项进行详细总结。
一、vector 基本概念
| 概念 | 说明 |
| 定义 | `std::vector |
| 特点 | 动态大小、随机访问、内存自动管理 |
| 头文件 | `include |
二、vector 常见操作与用法
1. 初始化与赋值
| 操作 | 示例代码 | 说明 |
| 默认初始化 | `std::vector | 创建一个空的 vector |
| 指定大小 | `std::vector | 创建一个包含 5 个默认值(0)的 vector |
| 指定大小与初始值 | `std::vector | 创建一个包含 5 个值为 10 的 vector |
| 从数组初始化 | `int arr[] = {1,2,3}; std::vector | 从数组中复制元素到 vector |
2. 元素访问
| 操作 | 示例代码 | 说明 |
| 索引访问 | `vec[0]` | 通过下标访问元素(不检查越界) |
| at() 方法 | `vec.at(0)` | 通过下标访问元素(会检查越界) |
| front() | `vec.front()` | 获取第一个元素 |
| back() | `vec.back()` | 获取最后一个元素 |
3. 元素插入与删除
| 操作 | 示例代码 | 说明 |
| push_back() | `vec.push_back(5);` | 在末尾添加一个元素 |
| insert() | `vec.insert(vec.begin(), 10);` | 在指定位置插入一个或多个元素 |
| pop_back() | `vec.pop_back();` | 删除最后一个元素 |
| erase() | `vec.erase(vec.begin());` | 删除指定位置的元素 |
| clear() | `vec.clear();` | 清空所有元素 |
4. 容量与大小
| 操作 | 示例代码 | 说明 |
| size() | `vec.size();` | 返回当前元素数量 |
| capacity() | `vec.capacity();` | 返回当前分配的内存容量 |
| empty() | `vec.empty();` | 判断 vector 是否为空 |
| resize() | `vec.resize(10);` | 调整 vector 的大小 |
| reserve() | `vec.reserve(10);` | 预分配内存以提高性能 |
5. 迭代器操作
| 操作 | 示例代码 | 说明 |
| begin() | `vec.begin()` | 返回指向第一个元素的迭代器 |
| end() | `vec.end()` | 返回指向最后一个元素后一个位置的迭代器 |
| rbegin() | `vec.rbegin()` | 反向迭代器 |
| rend() | `vec.rend()` | 反向迭代器结束位置 |
三、vector 使用注意事项
| 注意事项 | 说明 |
| 内存管理 | vector 自动管理内存,但频繁插入可能导致性能问题 |
| 避免越界 | 使用 `at()` 或 `[]` 时注意索引范围 |
| 性能优化 | 使用 `reserve()` 提前分配内存可减少重新分配次数 |
| 类型一致性 | 所有元素必须是相同类型,不能混用不同数据类型 |
| 迭代器失效 | 插入或删除操作可能导致迭代器失效,需谨慎处理 |
四、vector 与数组对比
| 特性 | vector | 数组 |
| 大小是否固定 | 动态 | 固定 |
| 内存管理 | 自动 | 手动 |
| 访问方式 | 索引/迭代器 | 索引 |
| 插入删除 | 支持 | 不支持 |
| 适用场景 | 动态数据结构 | 固定大小数据 |
五、总结
`vector` 是 C++ 中最常用的容器之一,其灵活性和便捷性使其成为处理动态数据的理想选择。掌握其基本操作和使用技巧,能够极大提升编程效率。在实际开发中,建议合理使用 `reserve()` 和 `clear()` 等方法,避免不必要的内存开销,同时注意迭代器的有效性,确保程序稳定运行。
如需进一步了解 `vector` 的高级用法(如排序、查找、自定义比较等),可参考 STL 文档或相关 C++ 教程。


