【stdvector】在C++编程中,`std::vector` 是标准模板库(STL)中最常用的数据结构之一。它是一个动态数组,能够根据需要自动扩展或收缩大小,非常适合用于存储和操作一系列相同类型的数据。
一、总结
`std::vector` 是一个基于数组的容器,支持随机访问、动态扩容、插入和删除等操作。相比传统的固定大小数组,`std::vector` 提供了更高的灵活性和安全性。其核心特性包括:
- 动态大小:可根据元素数量自动调整内存。
- 随机访问:通过下标直接访问元素。
- 连续存储:所有元素在内存中是连续存放的,便于高效访问。
- 支持多种操作:如 `push_back()`、`pop_back()`、`insert()`、`erase()` 等。
以下是 `std::vector` 的一些常见用法和性能特点的对比。
二、表格展示
| 功能/方法 | 描述 | 时间复杂度 |
| `push_back()` | 在末尾添加元素 | 平均 O(1) |
| `pop_back()` | 删除末尾元素 | O(1) |
| `insert(pos, val)` | 在指定位置插入元素 | O(n) |
| `erase(pos)` | 删除指定位置的元素 | O(n) |
| `size()` | 返回当前元素个数 | O(1) |
| `capacity()` | 返回当前分配的内存容量 | O(1) |
| `reserve(n)` | 预分配至少 n 个元素的空间 | O(n) |
| `clear()` | 清空所有元素 | O(n) |
| `at(i)` | 访问第 i 个元素(带边界检查) | O(1) |
| `operator[]` | 访问第 i 个元素(不带边界检查) | O(1) |
三、使用建议
- 频繁插入/删除:如果操作集中在中间或开头,应考虑使用 `std::list` 或 `std::deque`。
- 内存优化:使用 `reserve()` 可避免多次重新分配内存,提高性能。
- 安全性:优先使用 `at()` 而不是 `operator[]`,以防止越界访问。
- 迭代器失效:在插入或删除元素后,某些迭代器可能失效,需注意更新。
四、示例代码
```cpp
include
include
int main() {
std::vector
vec.push_back(4);
vec.insert(vec.begin() + 1, 5);// 在索引1处插入5
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
```
输出结果为:`1 5 2 3 4`
五、总结
`std::vector` 是 C++ 中非常强大且灵活的容器,适用于大多数需要动态数组的场景。掌握其基本操作和性能特点,能显著提升程序的效率和可维护性。在实际开发中,合理选择数据结构是编写高质量代码的关键之一。


