首页 > 其他分享 >rust学习九.1-集合之向量

rust学习九.1-集合之向量

时间:2024-11-14 17:41:39浏览次数:1  
标签:arr get height println let rust 集合 向量 vec

一、纲要

  定义


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


  操作


  0.读取   索引语法或者 get 方法 ,注意索引从0开始. vec[0]或者vec.get(0)
           vec[i] 不会改变所有权,但如果发生越界,则会导致程序终止
           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[i]; }
 

   向量和枚举


   利用枚举的特性,而已让向量存储不同类型的数据,这是因为枚举允许不同成员有不同类型的数据。

   应该没有什么人会这么搞吧? rust还是有对应措施,使得有基本上可以匹配java的List<Object>的类型存在。

二、示例

 

fn main() {
    //1.0 定义
    let mut height_arr: Vec<i32> = Vec::new();    
    //1.1 宏定义
    let mut arr = vec![1, 2, 3];
    //2.0 添加元素
    height_arr.push(130);
    height_arr.push(135);
    height_arr.push(140);
    height_arr.push(142);
    height_arr.push(145);
    height_arr.push(150);
    height_arr.push(160);
    println!("{:?} 共有{}个元素", height_arr,height_arr.len());
    //2.1 访问具体元素- 常规的方法不会导致所有权转移
    let a1 = height_arr[0];
    let a2= height_arr.get(1).unwrap();
    println!("a1={},a2={}", a1,a2);
    //2.2 使用索引访问,测试越界访问。这会导致程序异常,并终止
    //如果是get越界,会返回None
    //thread 'main' panicked at xx.rs:52:24:
    //index out of bounds: the len is 7 but the index is 10
    println!("访问越界元素");
    //let a3 = height_arr[10];  //这会导致程序异常,并终止
    let a3= height_arr.get(10);
    if let None = a3 {
        println!("不存在第11个元素:{}","None");
    }    

    //3.0 修改元素
    height_arr[0] = 131;
    //4.0 删除元素
    height_arr.pop();  //移除最后一个元素
    println!("{:?} 移除一个后,还有{}个元素", height_arr,height_arr.len());
    //5.0 遍历
    //5.1 简单语法
    println!("遍历一、简单语法遍历向量,所有权转移");
    //for i in height_arr  这样会导致所有权转移
    //这里必须使用引用,否则用过之后,所有都转移了。后续要是再使用则会报错
    for i in &height_arr {
        println!("{}", i);
    }
    //5.2 迭代器-这个方式不会改变所有权,后面可以继续使用原来的变量
    println!("遍历二、迭代器遍历向量,所有权不转移");
    for i in height_arr.iter() {
        println!("{}", i);
    }
    //5.3 for+get
    // 索引法和get方法都不会导致所有权转移,所以可以继续使用原来的变量
    println!("遍历三、for+索引遍历向量,所有权不转移");
    for i in 0..height_arr.len() {
        let e = height_arr[i];
        let b = height_arr.get(i);
        println!("{},{:?}", e,b);
    }
 }

 

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

 

标签:arr,get,height,println,let,rust,集合,向量,vec
From: https://www.cnblogs.com/lzfhope/p/18546485

相关文章

  • 当然不是草台班子-冲刺集合
    作业所属课程软件工程2024作业要求2024秋软工实践团队作业-第三次(Alpha冲刺)作业目标alpha冲刺完成项目核心功能团队名称当然不是草台班子天数理想剩余工作量实际剩余工作量已完成百分比日志日期11201200%2024/11/721151200%2024......
  • 向量动态量化
    本文介绍向量检索服务DashVector动态量化功能和作用。背景介绍量化(Quantization)是向量检索技术中一种常用的优化方法,通过一定程度的精度(召回率)损失,来换取性能的大幅度提升,以及内存占用(索引文件大小)大幅度降低。向量检索服务DashVector支持向量的动态量化,用户仅需在新建Collecti......
  • MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图)
    目录项目背景介绍...1项目目标与意义...1项目挑战...2项目特点与创新...2项目应用领域...3项目效果预测图程序设计...3项目模型架构...4项目模型描述...4项目模型算法流程图...5项目结构设计...5项目部署与应用...6项目扩展...6项目应该注意事项...6......
  • 渗透测试--危险协议集合
    FTP协议    FTP协议有多种泄露信息的途径:1.anonymous登录,上传下载文件2.Wireshark抓取FTP的数据包,并还原传输内容。FTP协议设置     cat/etc/vsftpd.conf|grep-v"#"FTP禁用用户列表cat/etc/ftpusers危险参数递归显示ftp>ls-R下载文......
  • JAVASCRIPT 将推出新的时间、日期和集合功能
    我们预计将在ECMAScript2025中看到的重大JavaScript新功能,以及导致它们延迟的讨论。译自JavaScriptDueforNewTime,DateandSetFeaturesNextYear,作者MaryBranscombe。JavaScript下一个年度更新将在新年初确定其包含的功能,包括在2025年3月前达到最终第四阶......
  • 一、机器学习算法与实践_07支持向量机与集成学习算法笔记
    1支持向量机1.1定义SVM(SupportVectorMachine,即:支持向量机)是一种监督学习算法,主要用于分类问题,但也可用于回归分析(称为支持向量回归,SupportVectorRegression,简称SVR)1.2核心思想最大间隔原则:SVM试图找到一个超平面(在二维空间中是一条直线,在三维空间中是一个平面,在更......
  • rust学习八、包和模块
    总体上,也没有什么特别的地方,和其它语言比较起来。我们可以看懂熟悉的字眼:包括、模块、use、公共等等如果是英文,则需要知道crate、pub。本章节对应相关书籍的第七章节.一、一个rust可执行程序的大体结构就本章节而言,尚未接触到一个非常复杂的工程结构,据说有什么工作空间。不......
  • Rust 在 Android 的编程实践——技术驱动的车云一体化解决方案探索
    Greptime车云一体化解决方案颠覆了从前传统的车云协同模式,采用更加低成本、高效率的方案来满足当前的市场需求。其中GreptimeDBEdge作为核心组件,专为车机环境量身打造。本文旨在详尽探讨在Android平台利用Rust语言进行开发过程中所积累的经验和教训。交叉编译在车机场景......
  • Rust枚举之卧龙凤雏(Rust Option枚举、Rust Result枚举)(Rust Enum、Some(T)、Ok(T)、Err
    文章目录Rust枚举之卧龙凤雏枚举的基本概念枚举定义示例Result枚举:凤雏Result枚举的定义Result的使用场景示例1:文件读取示例2:链式操作与错误处理Option枚举:卧龙Option枚举的定义Option的使用场景示例1:从字符串解析数字示例2:链式操作总结Rust枚举之......
  • Scala 的Map集合
     Map集合有两种类型,可变的与不可变的,区别在于可变对象可以修改,而不可变对象不可以修改。默认情况下Scala使用不可变Map集合,如果需要使用可变Map集合,则需要显式地使用import导入包。在Scala中,可以同时使用可变与不可变的Map集合,不可变的直接使用Map,可变的使用mutable.Map。1.......