客户管理系统开发定制【Rust指南】常用集合Vector基本操作 | 结合enum多类型存储


文章目录

  前言

   客户管理系统开发定制常用集合也含有Vector容器,客户管理系统开发定制我们在其他语言例如C++客户管理系统开发定制中对此较为熟知,客户管理系统开发定制但是在用法上却有着不小的区别。客户管理系统开发定制最典型的莫过于租借规则客户管理系统开发定制对其作用的影响。本篇博客将介绍Rust 中的常用 Vector,学会它就可以向 Rust算法题征战了。


1、 存储特点

Vec<T> 叫做 Vector,有如下特点:

  • 由标准库提供,可存储多个值
  • 只能存储相同类型的数据,元素值在内存中是连续存放的
  • 可以在末尾动态添加元素值
    • 我们浅谈一下工作原理:
    • 动态添加不仅指的是可以在末尾添加元素值,更是因为当该连续内存块不能满足需求的时候,Vector会重新分配一块内存大的空间来存储各元素值,这也叫动态内存

2、Vector基本操作

2.1、创建 Vector容器

  1. 使用 Vec::new 函数
    • 示例:
    	let v: Vec<i32> = Vec::new();//需指定类型如 i32
    • 1
    • 虽然Rust 具有强大的类型推导能力,但是仅靠Vec::new只能创建一个空的vector容器
      如果不再进行下一步操作,那我们就需要显示的声明数据类型。
  2. 使用 vec!
    • 这是一个利用初始值创建的方法:
    	let v = vec![14,28,66];
    • 1
    • 无需进行显示声明类型,通过初始值可以由编译器自动推导。

2.2、添加元素值

  • 向 Vector 添加元素,使用push方法
    • 示例:
    	let mut v = Vec::new();	v.push(6);	v.push(2);	// 这里不需要显示声明类型,因为创建后又添加了元素值。
    • 1
    • 2
    • 3
    • 4
    • 注意v前加上了mut关键字,因为是添加元素,需要声明为可变的变量。

2.3、删除 Vector

  • 与其他任何 struct 一样,当Vector 离开作用域后就会被销毁,
    而容器中的元素值也会随之被清理。
  • 删除操作看着很简单,不需要我们代码操作,
    但是牵扯到对其中元素的引用的话情况就会复杂许多,继续往下看。

2.3、读取元素值(引用)

  1. 通过索引读取元素
  2. 通过 get方法
  3. 示例:
    fn main() {	let v =vec![1,2,3,4,5,6];	let fourth = &v[3];	println!("The exact element is {}",fourth);	match v.get(3) {    	Some(four)=>println!("The exact element is {}",four),    	None => println!("Null")	}}//运行结果为两边:The exact element is 4
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  4. 二者区别
    • 当索引超过当前数组长度会引起painc恐慌,程序会崩溃中止。
    • 使用与match配对的get方法越界时则会打印Null,不会中止程序。

2.4、遍历Vector 中的值

  • 使用for循环:
    fn main() {    let  v = vec![10,24,30,50];    for i in &v{    	println!("{}",i);  	}}//运行结果:10 24 30 50
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 实现对每一个元素的基本运算
    fn main() {	let mut v= vec![10,24,30,50];	for i in &mut v{ 	  *i+=10;	   println!("{}",i);   }}//运行结果:20 34 40 60
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

如果是简单的读取所有元素值,那么方法跟python 的for循环完全一致,但如果想对元素值进行操作就要声明v为可变变量,in后需要加上&mut表示可变引用,这里的*i是每个索引对应的值,可以理解为c++中的解引用方法。

3、所有权和借用规则的影响

不能在同一作用域内同时拥有可变和不可变引用

  • 该规则在Vector中也成立

  • 示例

      fn main() {  	  let mut v= vec![10,24,30,50];  	  let first = &v[0];  	  v.push(66);      println!("{}",first);  }  //这是有问题的代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 报错信息:
    error[E0502]: cannot borrow v as mutable because it is also borrowed as immutable

    • 英文的意思是不能把v租借为一个可变引用因为它已经是不可变的
    • 其实这跟Vector工作原理中的动态内存有关系,万一该容器重新为元素值分配空间,而first是不可变的引用,此时的 first 就没有了意义。

4、结合 存储多种数据类型

enum 的变体可以附加不同类型的数据且定义在同一个 enum类型下

综合实例:

#[derive(Debug)] //配合{:?},输出枚举的变体enum Virous {    Int(i32),    Float(f64),    Text(String)}//用来输出Vector所有元素fn print_all(v:Vec<Virous>){    for v in &v{        println!("{:?}",v);    }}fn main() {   let v= vec![    Virous::Int(99),    Virous::Text(String::from("微凉秋意")),    Virous::Float(38.6),    Virous::Float(66.6)];    //调用函数    print_all(v);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

代码解释:

  • Virous 是定义的枚举类,含有三种类型的变体:i32f64String
  • print_all 函数无返回、参数是存储Virous枚举类型的Vector集合,功能是进行遍历打印
  • 主函数是定义了变量v并初始化了四个元素值,三种类型都有涉及,最后调用函数完成运行

运行效果:


有关Rust常用集合Rust的分享就到此结束了,后续将会带来另外的常用集合。觉得写的不错可以点赞鼓励博主,给我不断更文的动力!

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发