美文网首页
rust学习总结-4

rust学习总结-4

作者: robertzhai | 来源:发表于2022-03-11 22:34 被阅读0次

    Vector

    • 动态数组类型用Vec<T>
    几种创建方式
    let v: Vec<i32> = Vec::new();
    
    let mut v = Vec::new();
    v.push(1);
    
    let v = vec![1, 2, 3];
    
    Vec::with_capacity(capacity)
    
    • 访问元素,确保索引不会越界的时候,就用索引访问,否则用 .get(索引超出返回None)
    • 数组的大小是可变的,当旧数组的大小不够用时,Rust 会重新分配一块更大的内存空间,然后把旧数组拷贝过来。这种情况下,之前的引用显然会指向一块无效的内存, 所以不允许不可变借用和可变借用一起使用
    • 遍历
    let v = vec![1, 2, 3];
    for i in &v {
        println!("{}", i);
    }
    
    let mut v = vec![1, 2, 3];
    for i in &mut v {
        *i += 10
    }
    
    

    HashMap

    • 需要use std::collections::HashMap;
    • 创建&插入&查询
    use std::collections::HashMap;
    
    // 创建一个HashMap,用于存储宝石种类和对应的数量
    let mut my_gems = HashMap::new();
    
    // 将宝石类型和对应的数量写入表中
    my_gems.insert("红宝石", 1);
    my_gems.insert("蓝宝石", 2);
    my_gems.insert("河边捡的误以为是宝石的破石头", 18);
    
    use std::collections::HashMap;
    
    let mut scores = HashMap::new();
    
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    
    let team_name = String::from("Blue");
    let score: Option<&i32> = scores.get(&team_name);
    
    use std::collections::HashMap;
    
    let text = "hello world wonderful world";
    
    let mut map = HashMap::new();
    // 根据空格来切分字符串(英文单词都是通过空格切分)
    //or_insert 返回了 &mut v 引用,因此可以通过该可变引用直接修改 map 中对应的值
    //使用 count 引用时,需要先进行解引用 *count,否则会出现类型不匹配
    for word in text.split_whitespace() {
        let count = map.entry(word).or_insert(0);
        *count += 1;
    }
    
    println!("{:?}", map);
    
    • 跟 Vec 一样,如果预先知道要存储的 KV 对个数,可以使用 HashMap::with_capacity(capacity) 创建指定大小的 HashMap,避免频繁的内存分配和拷贝,提升性能

    错误处理

    • 可恢复错误,Result<T, E> 用于可恢复错误
    • 不可恢复错误,panic! 用于不可恢复错误

    当出现 panic! 时,程序提供了两种方式来处理终止流程:栈展开和直接终止
    默认的方式就是 栈展开,这意味着 Rust 会回溯栈上数据和函数调用
    尽量不要在 main 线程中做太多任务,将这些任务交由子线程去做,就算子线程 panic 也不会导致整个程序的结束

    模块

    • 所有的类型都是私有化的,包括函数、方法、结构体、枚举、常量
    • 父模块完全无法访问子模块中的私有项,但是子模块却可以访问父模块、父父..模块的私有项
    • pub 对外可见
    • use 来引入模块,类似go的import,当外部的模块项 A 被引入到当前模块中时,它的可见性自动被设置为私有的
    • as 别名引用
    • pub use 表示将该引入的内容再度设置为可见
    • 多个引入,use std::collections::{HashMap,BTreeMap,HashSet};
    • 引入所有,use std::collections::*

    参考

    相关文章

      网友评论

          本文标题:rust学习总结-4

          本文链接:https://www.haomeiwen.com/subject/kegurrtx.html