Vector 向量

Vector

在 Rust 中,Vector(向量)是一种动态数组类型,它可以在运行时自动调整大小。Vector 是 Rust 标准库中的一个集合类型,提供了灵活、高效的数组操作。

使用 vector

vector 可存放多个值,Vec<T>叫做vector。

由标准库提供;
可存储多个值;
只能存储相同类型的数据;
值在内存中连续存放;

创建vector:

1. 使用 Vec::new 函数创建 vector:

fn main() {
    let mut v:Vec<i32> = Vec::new();
    v.push(1);
    println!("{:?}", v)
}

2. 使用初始值创建Vec<T>,使用vec!宏

 let v = vec![1, 2, 3]; 
 // 推断std::vec::Vec<i32>类型 

添加元素

向 Vector 添加元素,使用push方法

 let mut v = Vec::new(); 
 v.push(1); // 因添加了元素,编译器可推断出类型是Vec<i32> 
 v.push(2); 

删除 vector

与任何其它struct一样,当Vector离开作用域后,它将被清理,且所有元素也将被清理。

读取vector的元素

引用vector里的值的两种方式:索引、get方法。针对越界访问,索引的方式会导致程序崩溃(panic),get的方式会返回None。

示例 :

fn main() {
    let mut v:Vec<i32> = Vec::new();
    v.push(1);
    let v1:i32 = v[0];
    println!("{}",v1);

    let mut t2:i32 = 0;
    match v.get(1) {
        Some(x) => t2 = *x,
        None => println!("None")
    }
    print!("{}", t2);
    t2 = 8;
    println!("{}", t2);
}

遍历vector

fn main() {
    let v: Vec<i32> = vec![1,2,3,4,5];
    for vn in v {
        println!("{}", vn);
    }
}

使用vector+enum来存储多种数据类型

vector只能存储一种类型,有时需要存放多种类型,则结合enum来完成。因为enum的变体可附加不同类型的数据,enum变体定义在同一个enum类型下。

enum Demo {
    Int(i32),
    Float(f32),
    String(String),
}
fn main() {
    let data: Vec<Demo> = vec![
        Demo::Int(1), 
        Demo::Float(1.1), 
        Demo::Int(2),
        Demo::String(String::from("hello"))];
    for v in data {
        match v {
            Demo::Int(i) => println!("int: {}", i),
            Demo::Float(f) => println!("float: {}", f),
            Demo::String(s) => println!("string: {}", s),
        }
    }
}