C++ STL容器:vector高效使用指南
STL容器概述STLStandard Template Library是C标准库的核心组成部分提供了一系列通用的数据结构和算法。容器是STL中用于存储和管理数据的模板类分为序列容器如vector、list和关联容器如map、set。首先我们来看第一个常用的容器vector。vector容器基本概念vector是动态数组属于序列容器支持随机访问。其特点包括内存连续分配可通过下标快速访问元素O(1)时间复杂度。动态扩容当容量不足时自动分配更大的内存并迁移数据通常扩容因子为1.5或2倍。也可以自定义扩大倍数。尾部插入/删除高效O(1)中间或头部操作较慢O(n)。使用方法预览#include vector using namespace std; // 1. 初始化 vectorint v1; // 空vector vectorint v2(5, 10); // 5个元素初始值为10 vectorint v3 {1, 2, 3}; // 列表初始化 // 2. 元素访问 int a v3[0]; // 下标访问不检查越界 int b v3.at(1); // 带越界检查的访问 int c v3.front(); // 首元素 int d v3.back(); // 末元素 // 3. 修改操作 v3.push_back(4); // 尾部插入 v3.pop_back(); // 尾部删除 v3.insert(v3.begin() 1, 5); // 在指定位置插入 v3.erase(v3.begin()); // 删除指定位置元素 v3.clear(); // 清空所有元素 // 4. 容量操作 bool isEmpty v3.empty(); // 判断是否为空 size_t size v3.size(); // 当前元素数量 size_t cap v3.capacity(); // 当前总容量 v3.reserve(100); // 预分配容量避免频繁扩容 v3.resize(10); // 调整元素数量 // 5. 迭代器遍历 for (auto it v3.begin(); it ! v3.end(); it) { cout *it ; } for (int num : v3) { // 范围for循环 cout num ; }注意事项越界访问operator[]不检查边界at()会抛出std::out_of_range异常。迭代器失效插入/删除操作可能导致迭代器失效如扩容后原指针失效。性能权衡频繁在中间插入/删除时考虑使用list或deque。底层原理内存管理通过动态数组实现内部维护三个指针start数据头、finish已用空间尾、end_of_storage总容量尾。扩容机制扩容时分配新内存拷贝旧数据并释放原内存。推荐使用reserve()预分配以减少扩容开销。元素类型存储的对象需支持拷贝构造和赋值操作如类对象需实现深拷贝。使用建议预分配空间已知大小时提前调用reserve()提升性能。避免频繁插入/删除若需高频操作中间元素改用list或deque。释放内存vector的clear()不会释放内存需通过swap技巧释放vectorint().swap(v1); // 清空并释放内存
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2431812.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!