企业设计个网站,光明区建设局网站,稻壳网站建设,3d模型资源哪个网站比较好【C STL】vector容器详解#xff1a;从入门到精通
摘要#xff1a;本文深入讲解C STL中vector容器的使用方法#xff0c;涵盖常用函数、代码示例及注意事项#xff0c;助你快速掌握动态数组的核心操作#xff01; 一、vector概述
vector是C标准模板库#xff08;STL STL】vector容器详解从入门到精通
摘要本文深入讲解C STL中vector容器的使用方法涵盖常用函数、代码示例及注意事项助你快速掌握动态数组的核心操作 一、vector概述
vector是C标准模板库STL中序列容器的代表本质上是一个动态数组。它能够根据需要自动调整大小支持快速随机访问在尾部插入/删除元素效率极高是C中最常用的容器之一。
核心特性
动态扩容内存空间自动增长默认翻倍策略连续存储元素内存连续支持指针偏移访问随机访问O(1)时间复杂度访问任意元素尾部操作高效push_back/pop_back的时间复杂度为O(1) 二、vector常用函数详解
1. 构造函数
vectorint v1; // 空vector
vectorint v2(5, 100); // 5个100
vectorint v3(v2.begin(), v2.end()); // 迭代器构造
vectorint v4(v3); // 拷贝构造// C11初始化列表
vectorint v5 {1,2,3,4,5}; 2. 元素访问
函数说明示例[]随机访问不检查越界v[2] 5;at()带边界检查的访问v.at(3) 10;front()首元素int a v.front();back()尾元素int b v.back();data()返回指向数组的指针C11int* p v.data();
3. 容量操作
v.empty(); // 判断是否为空
v.size(); // 当前元素个数
v.capacity(); // 当前分配的存储容量
v.reserve(100); // 预分配至少100个元素的空间
v.resize(10); // 调整元素个数为10默认填充0
v.shrink_to_fit(); // 请求移除未使用的容量C114. 修改操作
尾部操作
v.push_back(10); // 尾部插入元素
v.emplace_back(20); // 更高效的尾部构造C11
v.pop_back(); // 删除最后一个元素插入删除
v.insert(v.begin()2, 100); // 在第三个位置插入100
v.emplace(v.begin(), 50); // 构造插入C11
v.erase(v.begin()1); // 删除第二个元素
v.erase(v.begin(), v.begin()3); // 删除前三个元素
v.clear(); // 清空所有元素交换内容
vectorint v6 {6,7,8};
v.swap(v6); // 交换两个vector的内容三、vector遍历方式
1. 下标遍历
for(size_t i 0; i v.size(); i) {cout v[i] ;
}2. 迭代器遍历
for(auto it v.begin(); it ! v.end(); it) {cout *it ;
}3. 范围for循环C11
for(int num : v) {cout num ;
}四、实战示例代码
#include iostream
#include vector
using namespace std;int main() {vectorint vec;// 添加元素for(int i0; i5; i){vec.push_back(i*10);} // vec: 0 10 20 30 40// 中间插入vec.insert(vec.begin()2, 25); // 0 10 25 20 30 40// 删除元素vec.pop_back(); // 移除40vec.erase(vec.begin()); // 移除0 → 10 25 20 30// 修改元素vec[1] 250; // 10 250 20 30// 容量操作cout Capacity: vec.capacity() endl; // 8vec.shrink_to_fit();cout New capacity: vec.capacity() endl; //4// 遍历输出for(int num : vec) {cout num ;}return 0;
}输出结果
Capacity: 8
New capacity: 4
10 250 20 30 五、注意事项 迭代器失效 插入元素可能导致所有迭代器失效扩容时删除元素会使被删元素之后的迭代器失效 性能优化 使用reserve()预分配空间避免频繁扩容优先选择emplace_back()而非push_back() 特殊类型 vectorbool是特化版本每个元素占1bit行为可能与其他类型不同 内存管理 clear()只清空元素不释放内存结合shrink_to_fit()可真正释放多余内存C11 六、总结
vector凭借其高效的随机访问和动态扩展特性成为处理动态数组需求的首选容器。合理使用reserve预分配、选择正确的插入方法可以显著提升程序性能。掌握vector的各种操作将为你的C编程打下坚实基础