04. rust基础Vec-可变数组

Vec 基本知识

  1. 定义
    Vec 是一个存储堆分配的数据类型,可以动态改变大小。你可以将元素推送到 Vec 中,或者从其中删除元素。

  2. 动态大小
    不像数组([T; N])那样大小固定,Vec 的大小在运行时是可变的。你可以向 Vec 添加元素,也可以删除元素,甚至将它的容量增加或减少。

如何使用 Vec

1. 创建一个空的 Vec

let mut vec: Vec<i32> = Vec::new(); // 创建一个空的 Vec
vec.push(1); // 向 Vec 中添加元素
vec.push(2);

2. 使用宏创建 Vec

let vec = vec![1, 2, 3]; // 创建并初始化一个 Vec

3. 访问 Vec 元素

let vec = vec![1, 2, 3];
println!("{}", vec[0]); // 访问第一个元素,输出 1

如果访问的索引超出范围,会导致 panic,因此如果不确定索引是否有效,建议使用 get 方法,它返回一个 Option 类型。

let vec = vec![1, 2, 3];
match vec.get(2) {
Some(value) => println!("{}", value), // 输出 3
None => println!("Index out of bounds"),
}

4. 遍历 Vec

let vec = vec![1, 2, 3];
for val in &vec {
println!("{}", val);
}

5. 修改 Vec 元素

let mut vec = vec![1, 2, 3];
vec[0] = 10; // 修改第一个元素
println!("{:?}", vec); // 输出: [10, 2, 3]

6. 移除元素

let mut vec = vec![1, 2, 3];
vec.pop(); // 删除最后一个元素
println!("{:?}", vec); // 输出: [1, 2]

7. 清空 Vec

let mut vec = vec![1, 2, 3];
vec.clear(); // 清空 Vec
println!("{:?}", vec); // 输出: []

8. 添加元素

let mut vec = vec![1, 2, 3];
vec.push(4); // 在 Vec 末尾添加元素
println!("{:?}", vec); // 输出: [1, 2, 3, 4]

Vec 的高级用法

1. 使用 Vec 存储不同类型的元素

如果想要在 Vec 中存储不同类型的数据,可以使用 Box<dyn Any> 或者 enum 来实现类型封装。

enum MyEnum {
Integer(i32),
Float(f64),
}
let mut vec: Vec<MyEnum> = Vec::new();
vec.push(MyEnum::Integer(1));
vec.push(MyEnum::Float(3.14));

2. Vec 的内存优化与容量管理

Rust 中的 Vec 会动态增长,当你向 Vec 中添加元素时,可能会发生重新分配。你可以使用 capacityreserve 方法优化性能,避免频繁分配内存。

let mut vec = Vec::with_capacity(10); // 创建一个具有 10 个元素容量的 Vec
vec.reserve(20); // 增加更多容量,避免在 20 个元素时重新分配

3. 弹出元素并返回

Vec 提供了 pop 方法来移除并返回最后一个元素:

let mut vec = vec![1, 2, 3];
let last_element = vec.pop(); // 返回 Some(3)

4. 使用 Vec 的切片

通过切片,可以访问 Vec 的一部分而不进行复制:

let vec = vec![1, 2, 3, 4, 5];
let slice = &vec[1..4]; // 获取切片 [2, 3, 4]
println!("{:?}", slice); // 输出: [2, 3, 4]

与数组的区别

  • 大小Vec 的大小是可变的,而数组的大小是固定的。
  • 内存分配Vec 是在堆上分配内存的,因此可以动态增长;而数组的内存是在栈上分配的,大小在编译时必须已知。
  • 性能:由于 Vec 是动态增长的,它比数组具有更灵活的内存管理,但相应的开销也更大。

总结

  • Vec 是 Rust 中的动态数组,可以动态添加和删除元素。
  • 它提供了与数组类似的操作,但允许你在运行时调整大小。
  • Vec 用于需要存储可变数量元素的情况,广泛应用于实际项目中。

通过使用 Vec,你可以充分利用 Rust 的内存安全和性能优势,同时享受灵活的动态集合操作。

posted @   代码世界faq  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示