study_rust_example/common_collection/
vector_study.rs

1fn create_vector() -> Vec<i32> {
2    // 创建,在这里添加了i32类型注释。因为没有向这个向量插入任何值,Rust 不知道我们打算存储什么类型的元素
3    let v1: Vec<i32> = Vec::new();
4    let v2 = vec![1, 23, 456];
5    println!("v1 {:?}", v1);
6    println!("v2 {:?}", v2);
7    return v1;
8}
9
10fn update_vector_get_first_ele(v: &mut Vec<i32>, value: i32) -> Option<&i32> {
11    v.push(value);
12    v.push(value + 2);
13    v.push(value * 3);
14    return v.get(0);
15}
16
17fn get_ele_from_index_get_method(v: &Vec<i32>, index: usize) -> &i32 {
18    let value = v.get(index);
19    match value {
20        None => {
21            println!("index ele is null.");
22            return &(-1);
23        }
24        Some(value) => {
25            return value;
26        }
27    }
28}
29
30fn get_ele_from_index(v: &Vec<i32>, index: usize) -> i32 {
31    let value = v[index];
32    return value;
33}
34
35fn drop_vec_end_ele(v: &mut Vec<i32>) {
36    v.pop();
37}
38
39fn iterator_vector_twice(v: &mut Vec<i32>) {
40    println!("iterator_vector_twice for ... in:");
41    for val_ref in v {
42        *val_ref *= 2;
43    }
44}
45
46fn iterator_vector(v: &Vec<i32>) {
47    println!("iterator_vector for ... in:");
48    for val in v {
49        print!("{} ", val);
50    }
51}
52
53#[derive(Debug)]
54enum SpreadsheetCell {
55    Int(i32),
56    Float(f64),
57    Text(String),
58}
59
60fn enum_store_mul_type_vector() {
61    let row = vec![
62        SpreadsheetCell::Int(23),
63        SpreadsheetCell::Float(3.12),
64        SpreadsheetCell::Text(String::from("hello vector.")),
65    ];
66    for val in row {
67        println!("{:?}", val);
68    }
69}
70
71pub fn vector_usage_study() {
72    let mut vec1: Vec<i32> = Vec::new();
73    vec1 = create_vector();
74    let values: [i32; 3] = [12, 23, 43];
75    {
76        let first_value = update_vector_get_first_ele(&mut vec1, 32);
77        println!("first value: {:?}", first_value);
78    }
79    println!("vec1 {:?}", vec1);
80    let ele = get_ele_from_index_get_method(&vec1, 0);
81    println!("vec1 {:?}, ele: {}", vec1, ele);
82    let ele2 = get_ele_from_index(&vec1, 0);
83    println!("vec1 {:?}, ele2: {}", vec1, ele2);
84    {
85        iterator_vector_twice(&mut vec1);
86        println!("vec1 twice: {:?}", vec1);
87    }
88    iterator_vector(&vec1);
89    enum_store_mul_type_vector();
90    {
91        drop_vec_end_ele(&mut vec1);
92        println!("vec1 drop: {:?}", vec1);
93    }
94}