☰
【Rust入门知识点学与练】第9课:Vec 动态数组
2026/10/12 2:14:39 网站建设 项目流程

知识点:Vec — 可以增长和缩小的数组

普通数组长度固定,而 Vec 可以在运行时动态添加、删除元素:

fnmain(){// 创建空的 Vec(需要标注类型)letmutfruits:Vec<&str>=Vec::new();// 添加元素fruits.push("苹果");fruits.push("香蕉");fruits.push("橘子");println!("{:?}",fruits);// ["苹果", "香蕉", "橘子"]// 长度println!("长度: {}",fruits.len());// 3// 通过索引访问println!("第一个: {}",fruits[0]);// 苹果// 删除最后一个元素letlast=fruits.pop();println!("删除了: {:?}",last);// Some("橘子")println!("现在: {:?}",fruits);// ["苹果", "香蕉"]// 用 for 遍历forfruitin&fruits{println!("水果: {}",fruit);}// 用 vec! 宏快速创建(推荐)letnumbers=vec![10,20,30,40,50];println!("{:?}",numbers);// 检查是否包含某个元素println!("包含20? {}",numbers.contains(&20));// true// 排序(需要 mut)letmutnums=vec![3,1,4,1,5,9];nums.sort();println!("排序后: {:?}",nums);// [1, 1, 3, 4, 5, 9]}

核心规则

操作 写法
创建空 Vec Vec::new()
快速创建 vec![1, 2, 3]
添加元素 v.push(值)
删除末尾 v.pop()
长度 v.len()
访问 v[0]
包含 v.contains(&值)
排序 v.sort()
遍历 for x in &v { … }

动手试试

补全下面的代码:

fnmain(){// 补全:用 vec! 宏创建一个 Vec,包含 [5, 3, 8, 1, 9, 2]// 打印原始数组// 期望输出: 原始: [5, 3, 8, 1, 9, 2]// 补全:对这个 Vec 排序,然后打印// 期望输出: 排序后: [1, 2, 3, 5, 8, 9]// 补全:用 push 添加元素 7 和 4,然后打印// 期望输出: 添加后: [1, 2, 3, 5, 8, 9, 7, 4]// 补全:用 pop 删除最后一个元素,打印被删除的值和剩余数组// 期望输出:// 删除了: Some(4)// 剩余: [1, 2, 3, 5, 8, 9, 7]// 补全:用 for 循环计算剩余数组的总和并打印// 期望输出: 总和: 35// 补全:检查数组中是否包含 8,打印结果// 期望输出: 包含8? true}

期望输出:
原始: [5, 3, 8, 1, 9, 2]
排序后: [1, 2, 3, 5, 8, 9]
添加后: [1, 2, 3, 5, 8, 9, 7, 4]
删除了: Some(4)
剩余: [1, 2, 3, 5, 8, 9, 7]
总和: 35
包含8? true

写好了贴过来,没问题就进入第10课:Option 和 Result(错误处理入门) 👋

贴代码

fnmain(){// 补全:用 vec! 宏创建一个 Vec,包含 [5, 3, 8, 1, 9, 2]// 打印原始数组// 期望输出: 原始: [5, 3, 8, 1, 9, 2]letmutv=vec![5,3,8,1,9,2];println!("原始: {:?}",v);// 补全:对这个 Vec 排序,然后打印// 期望输出: 排序后: [1, 2, 3, 5, 8, 9]v.sort();println!("排序后: {:?}",v);// 补全:用 push 添加元素 7 和 4,然后打印// 期望输出: 添加后: [1, 2, 3, 5, 8, 9, 7, 4]v.push(7);v.push(4);println!("添加后: {:?}",v);// 补全:用 pop 删除最后一个元素,打印被删除的值和剩余数组// 期望输出:// 删除了: Some(4)// 剩余: [1, 2, 3, 5, 8, 9, 7]letremoved=v.pop();println!("删除了: {:?}",removed);println!("剩余: {:?}",v);// 补全:用 for 循环计算剩余数组的总和并打印// 期望输出: 总和: 35letmutsum=0;fornumin&v{sum+=num;}println!("总和: {}",sum);// 补全:检查数组中是否包含 8,打印结果// 期望输出: 包含8? truelethas_eight=v.contains(&8);println!("包含8? {}",has_eight);}

评语

完全正确!👏

你掌握了:

vec! 宏创建动态数组

push / pop 添加和删除元素

sort 排序、 contains 查找

pop 返回 Option 类型(你已经自然接触到了!)

知识点

  1. vec![] :创建动态数组(Vector),长度可以变化,必须 mut 才能增删、排序。
    ​
  2. .sort() :原地从小到大排序,直接修改 Vec,无返回值。
    ​
  3. .push(x) :尾部追加元素。
    ​
  4. .pop() :弹出尾部元素,返回 Option ,成功就是 Some(值) ,空向量时返回 None 。
    ​
  5. 遍历: for num in &v ,借用遍历,不拿走所有权。
    ​
  6. .contains(&值) :判断容器是否存在该元素,参数需要传引用。

数组([T;N]) vs Vec(动态数组)小结

  • 数组:长度编译期固定,不能变长变短;
    ​
  • Vec:运行时长度可变,可以push/pop,相当于Python的list。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询