Rust:Vector
一、Vector 基础特性
- 动态大小:可在运行时增长或缩小
- 堆分配:元素存储在堆内存中
- 类型安全:所有元素必须是相同类型
T - 所有权管理:Vector 拥有其元素的所有权
二、创建 Vector 的多种方式
1. 使用 Vec::new()
1 | |
2. 使用 vec! 宏(推荐)
1 | |
3. 从迭代器创建
1 | |
4. 预分配容量
1 | |
三、核心操作与常用方法
1. 添加元素
1 | |
2. 移除元素
1 | |
3. 访问元素
1 | |
4. 修改元素
1 | |
四、遍历与迭代
1. 只读迭代
1 | |
2. 可变迭代
1 | |
3. 获取索引和值
1 | |
4. 使用迭代器方法
1 | |
五、内存管理与性能优化
1. 容量与长度
1 | |
2. 手动管理内存
1 | |
六、高级用法
1. 存储不同类型(使用枚举)
1 | |
2. 多维 Vector
1 | |
3. 向量切片
1 | |
4. 排序和搜索
1 | |
七、常见使用场景
1. 读取文件内容
1 | |
2. 命令行参数处理
1 | |
3. 高效数据处理
1 | |
八、性能注意事项
- push/pop 操作:平均 O(1) 时间复杂度
- 插入/删除中间元素:O(n) 时间复杂度
- 索引访问:O(1) 时间复杂度
- 搜索未排序数据:O(n) 时间复杂度
- 扩容成本:当容量不足时,需要重新分配内存和复制元素
九、最佳实践
- 优先使用
vec!宏:简洁且高效 - 预分配容量:当知道大致大小时,使用
Vec::with_capacity() - 安全访问:优先使用
get()而不是直接索引 - 迭代代替索引:更安全且通常更高效
- 复用内存:使用
clear()清空内容但保留容量
1 | |
十、与其他集合对比
| 特性 | Vector (Vec<T>) |
数组 ([T; N]) |
切片 (&[T]) |
|---|---|---|---|
| 大小 | 动态可变 | 固定 | 动态但不可变 |
| 内存位置 | 堆 | 栈 | 借用 |
| 所有权 | 拥有元素 | 拥有元素 | 借用元素 |
| 索引访问 | O(1) | O(1) | O(1) |
| 添加元素 | O(1) 均摊 | 不可能 | 不可能 |
| 适用场景 | 动态集合、未知大小数据 | 固定大小、性能关键区 | 函数参数、视图 |
Rust:Vector
http://blog.luliang.online/2025/09/26/Rust(三)/