747 字
4 分钟
Rust Vector(Vec)教程 7day

🦀 Rust Vector(Vec)教程#

目录#

  1. Vector 概念
  2. 创建 Vector
  3. 访问元素
  4. 添加和删除元素
  5. 遍历 Vector
  6. 可变 Vector 与不可变 Vector
  7. 切片与 Vector
  8. Vector 常用方法
  9. 综合示例
  10. 总结

1️⃣ Vector 概念#

  • Vec<T>动态数组
  • 可以在运行时动态增长或缩小
  • 元素类型统一
  • 数据存储在 堆(Heap)
  • Rust 的所有权规则同样适用
let v: Vec<i32> = Vec::new(); // 空 Vector

2️⃣ 创建 Vector#

空 Vector#

fn main() {
let v: Vec<i32> = Vec::new();
}

带初始元素#

fn main() {
let v = vec![1, 2, 3, 4];
println!("{:?}", v);
}

3️⃣ 访问元素#

使用索引#

fn main() {
let v = vec![10, 20, 30];
println!("第一个元素: {}", v[0]);
}

⚠️ 注意:索引越界会 panic

使用 get#

fn main() {
let v = vec![10, 20, 30];
match v.get(2) {
Some(x) => println!("第三个元素: {}", x),
None => println!("索引越界"),
}
}

4️⃣ 添加和删除元素#

添加元素#

fn main() {
let mut v = vec![1, 2];
v.push(3); // 添加到末尾
println!("{:?}", v); // [1, 2, 3]
}

删除元素#

fn main() {
let mut v = vec![1, 2, 3];
let last = v.pop(); // 移除并返回最后一个元素
println!("pop: {:?}, vec: {:?}", last, v); // pop: Some(3), vec: [1,2]
}

也可以用 remove(index) 删除指定位置元素。


5️⃣ 遍历 Vector#

使用 for 循环#

fn main() {
let v = vec![10, 20, 30];
for i in &v {
println!("{}", i);
}
}

使用迭代器#

fn main() {
let v = vec![10, 20, 30];
v.iter().for_each(|x| println!("{}", x));
}

可变遍历#

fn main() {
let mut v = vec![1, 2, 3];
for i in &mut v {
*i *= 2;
}
println!("{:?}", v); // [2, 4, 6]
}

6️⃣ 可变 Vector 与不可变 Vector#

  • 默认创建不可变 Vector:

    let v = vec![1, 2, 3];
    // v.push(4); // ❌ 编译错误
  • 使用 mut 声明可变 Vector:

    let mut v = vec![1, 2, 3];
    v.push(4); // ✅

7️⃣ 切片与 Vector#

Vector 可以借用生成切片(slice):

fn main() {
let v = vec![1, 2, 3, 4, 5];
let s = &v[1..4]; // [2,3,4]
println!("{:?}", s);
}

切片是对 Vector 的引用,不拥有数据。


8️⃣ Vector 常用方法#

方法功能
push(val)添加元素到末尾
pop()移除末尾元素
insert(index, val)在指定位置插入
remove(index)移除指定位置元素
len()返回长度
is_empty()是否为空
iter()获取不可变迭代器
iter_mut()获取可变迭代器
clone()克隆整个 Vector

9️⃣ 综合示例#

fn main() {
let mut v = vec![1, 2, 3];
v.push(4);
println!("Vector: {:?}", v);
let last = v.pop();
println!("pop: {:?}, Vector: {:?}", last, v);
for val in &mut v {
*val *= 10;
}
println!("修改后的 Vector: {:?}", v);
let slice = &v[0..2];
println!("切片: {:?}", slice);
}

输出:

Vector: [1, 2, 3, 4]
pop: Some(4), Vector: [1, 2, 3]
修改后的 Vector: [10, 20, 30]
切片: [10, 20]

10️⃣ 总结#

  1. Vec<T> 是动态数组,存储在堆上
  2. 支持动态增长和缩小
  3. 可通过索引或切片访问元素
  4. 可变 Vector 可修改元素和添加删除
  5. 切片是借用 Vector 的一部分
  6. 使用迭代器方便遍历
  7. 常用方法:push, pop, insert, remove, iter

💡 练习建议

  1. 创建一个 Vec<String>,添加、删除、遍历字符串
  2. 尝试用可变引用修改 Vector 内的元素
  3. 编写函数接收 Vector 切片,返回最大值
  4. 用迭代器实现对 Vector 所有元素求和
Rust Vector(Vec)教程 7day
https://iqwq.com/posts/rust/study-vector-demo-7day/
作者
Xiaolin
发布于
2025-11-03
许可协议
CC BY-NC-SA 4.0