747 字
4 分钟
Rust Vector(Vec)教程 7day
🦀 Rust Vector(Vec)教程
目录
- Vector 概念
- 创建 Vector
- 访问元素
- 添加和删除元素
- 遍历 Vector
- 可变 Vector 与不可变 Vector
- 切片与 Vector
- Vector 常用方法
- 综合示例
- 总结
1️⃣ Vector 概念
Vec<T>是 动态数组- 可以在运行时动态增长或缩小
- 元素类型统一
- 数据存储在 堆(Heap) 上
- Rust 的所有权规则同样适用
let v: Vec<i32> = Vec::new(); // 空 Vector2️⃣ 创建 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️⃣ 总结
Vec<T>是动态数组,存储在堆上- 支持动态增长和缩小
- 可通过索引或切片访问元素
- 可变 Vector 可修改元素和添加删除
- 切片是借用 Vector 的一部分
- 使用迭代器方便遍历
- 常用方法:
push,pop,insert,remove,iter
💡 练习建议:
- 创建一个
Vec<String>,添加、删除、遍历字符串 - 尝试用可变引用修改 Vector 内的元素
- 编写函数接收 Vector 切片,返回最大值
- 用迭代器实现对 Vector 所有元素求和
Rust Vector(Vec)教程 7day
https://iqwq.com/posts/rust/study-vector-demo-7day/