ToB企服应用市场:ToB评测及商务社交产业平台

标题: rust学习九.1、集合之向量 [打印本页]

作者: 王柳    时间: 2024-11-14 16:57
标题: rust学习九.1、集合之向量
一、纲要

  界说

  1. new   Vec::new();
  2. 采用宏  vec![1, 2, 3];

  操纵

  0.读取   索引语法或者 get 方法 ,注意索引从0开始. vec[0]或者vec.get(0)
           vec 不会改变全部权,但如果发生越界,则会导致步伐制止
           get(i) 返回的是一个Option范例,同样不会改变全部权。越界放回None
  rust也要照顾到大家的习惯,不要读取一个索引就改变全部权。如果是那样着实太麻烦了。
  1.添加   push ,添加都尾部
  2.修改   vec[0] = 10;
  3.删除   pub,remove
  4.遍历  
     a. 简单语法  for i in &vec {}
     b. 迭代器  for i in vec.iter() {}
     c. for+get  for i in 0..vec.len() { let e = &v; }
 
   向量和枚举

   利用枚举的特性,而已让向量存储不同范例的数据,这是因为枚举允许不同成员有不同范例的数据。
   应该没有什么人会这么搞吧? rust还是有对应措施,使得有基本上可以匹配java的List的范例存在。
二、示例

 
  1. fn main() {
  2.     //1.0 定义
  3.     let mut height_arr: Vec<i32> = Vec::new();   
  4.     //1.1 宏定义
  5.     let mut arr = vec![1, 2, 3];
  6.     //2.0 添加元素
  7.     height_arr.push(130);
  8.     height_arr.push(135);
  9.     height_arr.push(140);
  10.     height_arr.push(142);
  11.     height_arr.push(145);
  12.     height_arr.push(150);
  13.     height_arr.push(160);
  14.     println!("{:?} 共有{}个元素", height_arr,height_arr.len());
  15.     //2.1 访问具体元素- 常规的方法不会导致所有权转移
  16.     let a1 = height_arr[0];
  17.     let a2= height_arr.get(1).unwrap();
  18.     println!("a1={},a2={}", a1,a2);
  19.     //2.2 使用索引访问,测试越界访问。这会导致程序异常,并终止
  20.     //如果是get越界,会返回None
  21.     //thread 'main' panicked at xx.rs:52:24:
  22.     //index out of bounds: the len is 7 but the index is 10
  23.     println!("访问越界元素");
  24.     //let a3 = height_arr[10];  //这会导致程序异常,并终止
  25.     let a3= height_arr.get(10);
  26.     if let None = a3 {
  27.         println!("不存在第11个元素:{}","None");
  28.     }   
  29.     //3.0 修改元素
  30.     height_arr[0] = 131;
  31.     //4.0 删除元素
  32.     height_arr.pop();  //移除最后一个元素
  33.     println!("{:?} 移除一个后,还有{}个元素", height_arr,height_arr.len());
  34.     //5.0 遍历
  35.     //5.1 简单语法
  36.     println!("遍历一、简单语法遍历向量,所有权转移");
  37.     //for i in height_arr  这样会导致所有权转移
  38.     //这里必须使用引用,否则用过之后,所有都转移了。后续要是再使用则会报错
  39.     for i in &height_arr {
  40.         println!("{}", i);
  41.     }
  42.     //5.2 迭代器-这个方式不会改变所有权,后面可以继续使用原来的变量
  43.     println!("遍历二、迭代器遍历向量,所有权不转移");
  44.     for i in height_arr.iter() {
  45.         println!("{}", i);
  46.     }
  47.     //5.3 for+get
  48.     // 索引法和get方法都不会导致所有权转移,所以可以继续使用原来的变量
  49.     println!("遍历三、for+索引遍历向量,所有权不转移");
  50.     for i in 0..height_arr.len() {
  51.         let e = height_arr[i];
  52.         let b = height_arr.get(i);
  53.         println!("{},{:?}", e,b);
  54.     }
  55. }
复制代码
 
rust-script 执行下,结果如下:

 
三、小结

   1.长度可变,容量自动管理
   2.元素范例必须相同
   3.可存放任何范例数据,包罗引用
   4.某种情况下,类似java的List,但比java的List差,因为java的List可以存储不同范例成员
   5. 向量具有许多的方法,必要自行去看api文档,无法一一列出,也没有须要。
   rust的向量的api文档 https://doc.rust-lang.org/std/vec/struct.Vec.html
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4