介绍我们知道vector是一个动态数组。在C++中,vector只能存储一种类型,如何存储多个无非就是包裹一层,例如:structure,void*。在Rust中,enum是非常独特的,每个值都可以是不同的类型,所以我们从enum来考虑。另一方面,从矢量读取的几种不同方式有何不同?1.Vector实例例如:一个枚举包含不同的类型#[derive(Debug)]enumSpec{Int(i32),Float(f64),Bool(bool),Text(String),}call:pubfnmult_type(){letr=vec![Spec::Int(1),Spec::Float(2.2),Spec::Bool(true),Spec::Text(String::from("hello"))];打印!("{:?}",r)}这使得使用不同类型完成向量变得容易。2.在示例向量中,您可以获取其中的元素。有以下方法:v[2]&v[2]v.get(2)这三个有什么区别?前两个显然和传统的获取元素的方式是一致的。下标越界就会panic,get使用了Option特殊枚举,越界会返回None,不会panic,足以说明Rust的安全性。因为v.get返回的是一个Option,所以我们可以使用match来控制流程,提取包中的内容。matchv.get(2){Some(x)=>println!("{}",x),None=>println!("None")}接下来,我们考虑v[2]和&v[2]的区别.//case1:&letmutv=vec![1,2,3,4,5];letfirst=&v[0];v.push(6);println!("第一个元素是:{}",first);//case2:plainletmutv=vec![1,2,3,4,5];letfirst=v[0];v.push(6);println!("第一个元素是:{}",first);综合以上两种情况,推的时候哪种情况是正常的呢?答案是第二种情况会正常运行,第一种情况会因为&的影响而报错。在vector的末尾添加新元素时,如果没有足够的空间来存储所有相邻的元素,可能需要分配新的内存并将旧元素复制到新空间。此时,对第一个元素的引用指向释放的内存。借用规则可以防止程序陷入这种情况。这时候会报错:error:cannotborrowasmutablebecauseitisalsoborrowedasimmutable.