【c中vector的用法详解】在C++中,`vector` 是一个非常常用且强大的容器类,它提供了动态数组的功能,可以随着元素的增加或减少自动调整大小。相比传统的C语言数组,`vector` 提供了更灵活的操作方式和丰富的接口函数。以下是对 `vector` 常用方法的总结与说明。
一、基本概念
概念 | 说明 |
`vector` | C++标准库中的动态数组容器,定义在 ` |
动态扩容 | 根据需要自动扩展或缩小容量 |
随机访问 | 支持下标操作(`[]`)进行快速访问 |
灵活性 | 可以在运行时添加或删除元素 |
二、常用操作方法
以下是一些 `vector` 的常用操作及其使用示例:
方法 | 描述 | 示例代码 |
`push_back()` | 在末尾添加一个元素 | `vec.push_back(10);` |
`pop_back()` | 删除最后一个元素 | `vec.pop_back();` |
`size()` | 返回当前元素个数 | `int n = vec.size();` |
`capacity()` | 返回当前分配的内存空间大小 | `int cap = vec.capacity();` |
`empty()` | 判断是否为空 | `if (vec.empty()) { ... }` |
`clear()` | 清空所有元素 | `vec.clear();` |
`at()` | 通过索引访问元素(带边界检查) | `int val = vec.at(2);` |
`[]` | 通过索引访问元素(不带边界检查) | `int val = vec[2];` |
`insert()` | 在指定位置插入一个或多个元素 | `vec.insert(vec.begin() + 1, 5);` |
`erase()` | 删除指定位置的元素或一段区间 | `vec.erase(vec.begin() + 2);` |
`resize()` | 调整容器大小 | `vec.resize(10);` |
`reserve()` | 预分配内存空间 | `vec.reserve(100);` |
`begin()` / `end()` | 获取起始和结束迭代器 | `for (auto it = vec.begin(); it != vec.end(); ++it) { ... }` |
三、初始化方式
初始化方式 | 示例 | 说明 |
默认构造 | `vector | 创建一个空的 vector |
指定大小 | `vector | 创建一个包含5个默认值(0)的 vector |
指定大小和初始值 | `vector | 创建一个包含5个10的 vector |
从数组复制 | `int arr[] = {1,2,3}; vector | 从数组复制元素到 vector |
从另一个 vector 复制 | `vector | 复制一个 vector |
四、注意事项
- `vector` 的 `size()` 和 `capacity()` 是两个不同的概念,前者是实际存储的元素数量,后者是当前分配的内存空间。
- 使用 `push_back()` 时,如果当前容量不足,会触发重新分配内存,这可能会影响性能。
- `at()` 方法比 `[]` 更安全,因为它会在越界时抛出异常,而 `[]` 不会检查边界。
- `erase()` 和 `insert()` 操作可能会导致迭代器失效,需注意使用后更新迭代器。
五、总结
`vector` 是 C++ 中最常用的容器之一,具有灵活性高、操作方便等优点。掌握其基本用法和常见操作,能够显著提升程序开发效率。对于需要频繁增删元素的场景,`vector` 是一个理想的选择。建议结合具体应用场景合理使用 `vector` 的各项功能,并注意性能优化。
如需进一步了解 `vector` 的高级用法(如自定义类型支持、排序、查找等),可继续查阅相关资料或参考 C++ 标准文档。