c++中的vector
- 其他
- 2025-09-13 12:42:02

C++ 中的 `vector` 是一个非常常用的容器类,类似于动态数组。以下是一些关于 `vector` 的关键知识点和注意事项:
1. 基本概念动态数组:`vector` 是基于数组实现的,能够动态调整大小。它存储相同类型的元素,并允许随机访问。 头文件:需要包含头文件 `<vector>`。 命名空间:位于 `std` 命名空间下,需要 `using namespace std;` 或直接使用 `std::vector`。
2. 定义与初始化语法:
vector<T> vec; // 创建一个空的 vector,元素类型为 T vector<int> nums; // 创建一个空的 int 类型 vector初始化方式: 默认构造:创建空的 `vector`。 初始化列表:`vector<int> vec = {1, 2, 3};` 拷贝构造:`vector<int> vec2(vec);` 预留空间:`vec.reserve(n);` 预留存储 n 个元素的内存,但元素数量仍为 0。
3. 常用成员函数以下是一些常用的 `vector` 成员函数:
| 函数 | 描述 | |--------------------|--------------------------| | `push_back(val)` | 在末尾添加元素 | | `pop_back()` | 删除末尾元素 | | `size()` | 返回当前元素数量 | | `capacity()` | 返回当前容量(可容纳元素的最大数量) | | `empty()` | 判断是否为空 | | `resize(n)` | 调整大小为 n | | `clear()` | 删除所有元素 | | `at(index)` | 访问索引为 index 的元素(支持边界检查) | | `operator[]` | 访问索引为 index 的元素(不支持边界检查) | | `begin()` | 返回指向起始位置的迭代器 | | `end()` | 返回指向末尾位置的迭代器(超出范围) | | `front()` | 返回第一个元素 | | `back()` | 返回最后一个元素 |
4. 动态调整特性`vector` 会在需要时自动调整大小,例如: 调用 `push_back` 添加元素时,如果当前容量不足,`vector` 会分配更大的内存。 注意事项: 动态调整可能导致性能开销,频繁调用 `push_back` 可能会增加内存分配次数。 可以通过 `reserve` 函数预先分配空间,减少调整次数。
5. 索引访问的注意事项边界检查: 使用 `at(index)` 时,如果索引超出范围,会抛出 `out_of_range` 异常。 使用 `operator[]` 时,不会进行边界检查,可能导致未定义行为(如访问越界)。
6. 迭代器操作迭代器失效: 如果对 `vector` 进行插入或删除操作(如 `push_back`, `pop_back`, `insert`, `erase`),可能会使所有现有的迭代器、指针和引用失效。 推荐使用范围 `for`:
for (int x : vec) { cout << x << " "; }7. 清除与缩小容量
清除内容: `vec.clear()` 删除所有元素,但不释放内存,容量(`capacity`)保持不变。 缩小容量: 调用 `shrink_to_fit()` 或手动重新分配内存,以释放多余空间。
8. 示例代码以下是一个完整的代码示例,展示了 `vector` 的基本用法:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec; // 添加元素 vec.push_back(1); vec.push_back(2); vec.push_back(3); // 输出元素数量 cout << "Size: " << vec.size() << endl; // 遍历并输出元素 for (size_t i = 0; i < vec.size(); ++i) { cout << vec[i] << " "; } cout << endl; // 使用迭代器遍历 for (auto it = vec.begin(); it != vec.end(); ++it) { cout << *it << " "; } cout << endl; // 清除元素 vec.clear(); cout << "Size after clear: " << vec.size() << endl; return 0; } 输出: Size: 3 1 2 3 1 2 3 Size after clear: 09. 性能优化
预先分配空间: 如果知道元素的数量,可以使用 `reserve` 提前分配空间,减少内存分配次数:
vec.reserve(100); // 提前分配可存储 100 个元素的空间避免频繁修改: 对于需要大量插入和删除操作的场景,`vector` 的性能可能不如 `list` 等容器。
10. 常见错误与陷阱索引越界: 例如:`vec[10]` 访问了未初始化的内存(`vec` 的大小为 0),导致未定义行为。 迭代器失效: 修改 `vector` 的大小后,继续使用旧的迭代器会导致未定义行为。 容量和大小混淆: capacity() 表示 `vector` 预分配的内存量(可能大于 `size()`)。
总结 `vector` 是 C++ 中非常强大且灵活的容器类,适用于大多数需要动态数组的场景。正确使用其成员函数、注意边界条件和动态调整特性,可以避免许多常见的编程错误,提高代码的效率和可维护性。
c++中的vector由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“c++中的vector”
上一篇
C++编程:常见内置算法