1. 速查表
关于速查表
以下内容均来自于互联网等知识平台,这里只做收集个人平时开发使用
Vector & Linked List
Data Structure | Method | Time Complexity | Space Complexity | Description |
Vec<T> | new() | O(1) | O(1) | 创建一个空的 vector. |
| push(value) | Amortized O(1) | O(1) | 添加一个元素到 vector 末尾. |
| pop() | O(1) | O(1) | 从 vector 中删除最后一个元素并返回. |
| get(index) | O(1) | O(1) | 在指定索引上返回对元素的引用. |
VecDeque<T> | new() | O(1) | O(1) | 创建一个新的空双端队列. |
| push_front(value) | Amortized O(1) | O(1) | 在 Deque 的前面插入一个元素. |
| push_back(value) | Amortized O(1) | O(1) | 在 Deque 的后面插入一个元素. |
| pop_front() | O(1) | O(1) | 删除并返回 Deque 的第一个元素. |
| pop_back() | O(1) | O(1) | 去除并返回 Deque 的最后一个元素. |
LinkedList<T> | new() | O(1) | O(1) | 创建一个新的空链接列表. |
| push_front(value) | O(1) | O(1) | 在列表的开头插入元素. |
| push_back(value) | O(1) | O(1) | 在列表的末尾插入一个元素. |
| pop_front() | O(1) | O(1) | 删除并返回列表的第一个元素. |
| pop_back() | O(1) | O(1) | 删除并返回列表的最后一个元素. |
HashMap & HashSet
Data Structure | Method | Time Complexity | Space Complexity | Description |
HashMap<K,V> | new() | O(1) | O(1) | 创建一个新的 hash map. |
| insert(k,v) | Average O(1) | O(1) | 将键值对插入 map. |
| get(&k) | Average O(1) | O(1) | 返回对与 key 相对应的值的引用. |
| remove(&k) | Average O(1) | O(1) | 从 map 中删除 key 对应的值并返回其值. |
HashSet<T> | new() | O(1) | O(1) | 创建一个新的 hash set. |
| insert(value) | Average O(1) | O(1) | 添加一个值 set. |
| contains(&value) | Average O(1) | O(1) | 检查一个值是否在 set. |
| remove(&value) | Average O(1) | O(1) | 删除一个值从 set 中. |
String
Data Structure | Method | Time Complexity | Space Complexity | Description |
String | new() | O(1) | O(1) | 创建一个新的空的字符串. |
| push_str(s) | Amortized O(1) | O(1) | 添加一个字符串切片到字符串中. |
| pop() | O(1) | O(1) | 从字符串中删除最后一个字符并返回. |
| trim() | O(n) | O(1) | 去除字符串头部和尾部的. |
| split(delimiter) | O(n) | O(1) | 切分字符串并返回一个字符串切片. |
Iterator & Advanced Iterator
Data Structure | Method | Time Complexity | Space Complexity | Description |
Iterators | map(f) | Lazy | O(1) | 接受一个闭包 f ,并将这个闭包应用于迭代器的每个元素,生成一个新的迭代器. |
| filter(p) | Lazy | O(1) | 接受一个条件 p (返回布尔值的闭包),并过滤掉那些不满足条件的元素,生成一个新的迭代器. |
| fold(init, f) | O(n) | O(1) | 消费适配器,它通过一个初始值 init 和一个闭包 f 来逐步聚合迭代器中的元素,最终得到一个单一的值 |
| collect() | O(n) | O(n) | 消费适配器,它将迭代器中的元素收集到一个集合(如 Vec、HashSet 等)中. |
| zip(it) | Lazy | O(1) | 迭代器适配器,它将两个迭代器“拉链”在一起,形成一个新的迭代器,其中每个元素都是一个包含两个原始迭代器对应元素的元组. |
| chain(it) | Lazy | O(1) | 迭代器适配器,它将两个迭代器串联起来,形成一个新的迭代器,依次从第一个迭代器获取元素,然后从第二个迭代器获取元素. |
Iterators(Advanced) | take(n) | O(1) | O(1) | 迭代器适配器,它生成一个新的迭代器,该迭代器最多从原始迭代器中获取 n 个元素. |
| skip(n) | O(1) | O(1) | 迭代器适配器,它生成一个新的迭代器,跳过原始迭代器的前 n 个元素. |
| enumerate() | O(1) | O(1) | 迭代器适配器,它为每个元素附加一个索引,生成一个新的迭代器,其中的每个元素是一个 (index, value) 的元组. |
| peekable() | O(1) | O(1) | 迭代器适配器,它将迭代器转换为一个“可窥视”的迭代器,允许你在不消耗元素的情况下预览下一个元素. |
| filter_map(f) | O(n) | O(1) | filter_map 是一个结合了 filter 和 map 的迭代器适配器,它接受一个闭包 f,并对每个元素应用该闭包。闭包返回 Option 类型,只有当返回 Some(value) 时,元素才会包含在结果迭代器中 |
Binary Heap
Data Structure | Method | Time Complexity | Space Complexity | Description |
BinaryHeap<T> | new() | O(1) | O(1) | 创建一个空的 binary heap. |
| push(value) | O(log n) | O(1) | 添加一个元素到 binary heap. |
| pop() | O(log n) | O(1) | 删除并返回堆的最大元素. |
| peek() | O(1) | O(1) | 返回堆中最大值的元素的引用. |
B-Tree Map & B-Tree Set
Data Structure | Method | Time Complexity | Space Complexity | Description |
BTreeMap<K, V> | new() | O(1) | O(1) | 创建一个空的 B-tree map. |
| insert(key, value) | O(log n) | O(1) | 将键值对插入 map,保持顺序. |
| get(&key) | O(log n) | O(1) | 返回key对应值的引用 |
| remove(&key) | O(log n) | O(1) | 删除一个 key 对应的值,并保证排序. |
BTreeSet<T> | new() | O(1) | O(1) | 创建一个新的 B-tree set. |
| insert(value) | O(log n) | O(1) | 添加一个值到 set, 保持排序. |
| contains(&value) | O(log n) | O(1) | 检查 set 中是否包含此元素. |
| remove(&value) | O(log n) | O(1) | 删除指定元素从 set,保持排序. |
Option & Result
Data Structure | Method | Time Complexity | Space Complexity | Description |
Option<T> | is_some() | O(1) | O(1) | Some 枚举返回 true. |
| is_none() | O(1) | O(1) | None 枚举返回 true. |
| unwrap() | O(1) | O(1) | 解包 Some 中的值. |
| unwrap_or(def) | O(1) | O(1) | 返回包含的值或默认值. |
Result<T, E> | is_ok() | O(1) | O(1) | Ok 枚举返回 true. |
| is_err() | O(1) | O(1) | Err 枚举返回 true. |
| unwrap() | O(1) | O(1) | 解包 Ok 中的值. |
| unwrap_or(def) | O(1) | O(1) | 返回包含的值或默认值. |
File & I/O
Data Structure | Method | Time Complexity | Space Complexity | Description |
File | open(path) | O(1)* | O(1) | 以只读模式打开指定路径的文件。如果文件不存在,操作将返回 Err . |
| create(path) | O(1)* | O(1) | 创建一个新文件。如果文件已经存在,将其内容截断为零长度(清空文件)。如果文件不存在,则创建一个新文件 |
| read(&mut buf) | O(n)* | O(1) | 从文件中读取字节数据到缓冲区 buf 中。缓冲区的大小决定了读取的最大数据量 |
| write(&buf) | O(n)* | O(1) | 将缓冲区 buf 中的字节数据写入文件。数据的写入量由缓冲区大小决定 |
BufReader | new(reader) | O(1) | O(1) | 创建一个新的 BufReader 实例,包装一个实现了 Read 特性的对象(例如 File),并为其提供缓冲. |
BufWriter | new(writer) | O(1) | O(1) | 创建一个新的 BufWriter 实例,包装一个实现了 Write 特性的对象(例如 File),并为其提供缓冲 |
File System
Data Structure / Trait | Method | Time Complexity | Space Complexity | Description |
std::fs::File | create(path) | O(1)* | O(1) | 创建一个新文件。如果文件已经存在,则会截断文件(即清空文件内容)。如果文件不存在,则创建一个新文件. |
std::fs::DirBuilder | new() | O(1) | O(1) | 创建一个新的 DirBuilder 实例。这个实例可以用来配置目录创建选项(例如是否递归创建父目录) |
| create(path) | O(1)* | O(1) | 使用 DirBuilder 在指定路径下创建一个新目录。如果路径中包含不存在的父目录,可以通过设置 DirBuilder 的选项来递归创建它们. |
std::fs | read_dir(path) | O(1)* | O(1) | 读取指定路径下目录的内容,返回一个迭代器,该迭代器会逐一返回目录中的每个条目(文件或子目录). |
| remove_file(path) | O(1)* | O(1) | 删除指定路径的文件。如果路径指向的不是文件(例如是目录),则会返回错误. |
| copy(source, destination) | O(n)* | O(1) | 将源文件复制到目标位置。如果目标文件已经存在,它将被覆盖。该操作会复制文件的内容及其元数据 |
Concurrency Primitives
Data Structure | Method | Time Complexity | Space Complexity | Description |
Thread | spawn(f) | O(1) | O(1) | 创建一个新的线程来执行闭包 f。这个新线程将在与调用者线程并行的上下文中运行 |
Mutex<T> | lock() | O(1) | O(1) | 锁定互斥锁,如果锁已经被另一个线程持有,则当前线程将被阻塞,直到锁可用。一旦锁被解锁,当前线程将获得访问权限 |
Arc<T> | new(data) | O(1) | O(1) | 是一种线程安全的引用计数指针,允许多线程安全地共享数据 |
mpsc::Sender<T> | send(value) | O(1) | O(1) | 是用于跨线程发送消息的通道发送端,发送一个值 value 到对应的接收端。此操作将值的所有权移动到接收端. |
mpsc::Receiver<T> | recv() | O(1) | O(1) | 是用于接收来自通道发送端消息的接收端,阻塞当前线程,直到接收到一个值。当有新消息可用时,接收该消息并返回它 |
std::sync::atomic | Atomic operations | O(1) | O(1) | 提供了一些原子操作,用于在线程之间进行低级别的共享内存通信,可以防止竞争条件,允许对共享数据进行无锁的、线程安全的操作 |
std::sync::Barrier | Barrier::new(n) | O(1) | O(1) | 是一种同步机制,允许多个线程在某个点上等待,直到所有线程都到达这一点后,才能继续执行,创建一个新的 Barrier 实例,指定它需要等待的线程数量 n。当所有线程都调用 wait() 方法时,所有线程将同步并继续执行 |
Asynchronous Programming
Data Structure / Trait | Method | Time Complexity | Space Complexity | Description |
std::future::Future | await | O(1) | O(1) | 异步编程的核心特性,表示一个值或计算在未来某个时间点会完成。用于等待一个异步操作的完成。当你调用 await 时,当前的异步任务将暂停,直到 Future 完成,并返回其结果。在此期间,其他任务可以继续执行,从而提高效率和并发性 |
std::task::Poll | Used in Future::poll | O(1) | O(1) | 是一个枚举类型,用于表示异步操作的状态。它通常在 Future::poll 方法中使用。Poll::Pending 表示异步操作尚未完成,调用者应再次检查其状态。Poll::Ready(val) 表示异步操作已完成,并且包含计算的结果 val |
Advanced Numerics and Math
Data Structure / Trait | Method | Time Complexity | Space Complexity | Description |
std::cmp::Ord | cmp(&self, other) | O(1) | O(1) | Ord 特性是 Rust 中用于定义总排序(total ordering)的特性。它要求实现此特性的类型具有全序关系,并且需要实现 cmp 方法来比较两个值。cmp 方法用于比较两个值,并返回一个 std::cmp::Ordering 枚举 |
std::iter::Sum | sum<I: Iterator> | O(n) | O(1) | Sum 特性用于在迭代器上实现求和操作。它提供了一个 sum 方法,用于将迭代器中的所有项累加起来。迭代器的每一项都需要实现 Sum 特性 |
std::iter::Product | product<I: Iterator> | O(n) | O(1) | 用于对迭代器中的所有元素进行连乘,并返回结果。迭代器的每一项都需要实现 Product 特性 |
Traits and Pattern Matching
Trait / Feature | Method / Use Case | Time Complexity | Space Complexity | Description |
std::fmt::Debug | {:?} (formatting) | O(n) | O(1) | 调试输出,任何实现了 Debug 特性的类型都可以使用 {:?} 来进行格式化输出,通常用于调试时打印结构体或枚举的内部状态 |
std::fmt::Display | {} (formatting) | O(n) | O(1) | 用户友好的输出,实现了 Display 特性的类型可以使用 {} 进行格式化输出,通常用于打印或显示给最终用户 |
Pattern Matching | match val {} | O(1) - O(n) | O(1) | 模式匹配是 Rust 中非常强大的一种控制流机制,用于匹配和解构值,类似于其他语言中的 switch 或 case 语句,但更为灵活和强大. |
Enums and Matching | enum {Variants} | O(1) | O(1) | 枚举(enum)是一种定义多态类型的方法,可以表示一个类型的多个变体。枚举与模式匹配结合使用时,可以根据变体的不同执行不同的代码分支 |
Traits for Generic Programming
Trait | Method / Associated Function | Time Complexity | Space Complexity | Description |
std::iter::Iterator | next() | O(1) | O(1) | 是 Rust 中用于迭代集合或序列的特性。它定义了一个 next 方法,用于获取迭代器的下一个元素 |
std::convert::From | from() | O(1) | O(1) | 定义了一种类型到另一种类型的转换。它的实现要求提供一个 from 方法,将一种类型转换为目标类型 |
std::convert::Into | into() | O(1) | O(1) | Into 特性是 From 的对称特性。任何实现了 From 的类型自动实现 Into,它提供了一个 into 方法,直接将值转换为目标类型. |
std::default::Default | default() | O(1) | O(1) | 特性为类型提供了一个默认值,当无法显式提供初始值时,可以使用 default 方法来生成一个默认实例 |
std::clone::Clone | clone() | O(n) | O(n) | 允许为类型创建一个副本。实现了 Clone 特性的类型可以使用 clone 方法来复制其内容 |
std::cmp::PartialEq | eq(&self, other) | O(1)-O(n) | O(1) | 允许对类型进行部分相等比较。它的 eq 方法用于比较两个值是否相等。eq 方法比较 self 与 other ,返回 true 表示两个值相等,返回 false 表示不相等 |
Advanced Pattern Matching and Enums
Feature | Use Case | Time Complexity | Space Complexity | Description |
Enums with match | match enum_var { ... } | O(1) | O(1) | 用于安全地解构枚举类型,匹配不同的变体并执行相应操作,具有常数时间和空间复杂度 |
Pattern Guards | if let Some(x) = expr { ... } | O(1) | O(1) | 结合模式匹配和条件判断,确保匹配的值符合特定条件 |
@ Bindings | match val { pat @ subpat => ...} | O(1) | O(1) | 允许在匹配模式的同时绑定变量,并进一步解构. |
Collections and Their Advanced Uses
Data Structure / Trait | Method | Time Complexity | Space Complexity | Description |
std::collections::Range | start..end | O(1) | O(1) | 用于表示一个值的范围,可以用作迭代器 |
std::slice::Slice | binary_search(&self) | O(log n) | O(1) | 用于在有序切片中执行二分查找 |
std::vec::Vec | resize_with(len, f) | O(n) | O(n) | 用于调整向量大小,并用函数填充新元素 |
Error Handling and Debugging
Feature / Trait | Method / Use Case | Time Complexity | Space Complexity | Description |
std::result::Result | map_err(f) | O(1) | O(1) | 用于将 Result 的 Err 映射为另一类型 |
std::option::Option | and_then(f) | O(1) | O(1) | Calls a function on the contained value of an Option or returns None . |
std::panic | panic!("msg") | O(1) | O(1) | 触发程序恐慌 |
std::dbg! | dbg!(&val) | O(n) | O(1) | 快速调试工具 |
std::error::Error | description() | O(1) | O(1) | 提供错误描述 |
std::panic::catch_unwind(f) | Try to catch panics within f | O(1) | O(1) | 允许捕获和处理恐慌 |
Time
Data Structure / Trait | Method | Time Complexity | Space Complexity | Description |
std::time::Instant | now() | O(1) | O(1) | 用于获取当前时刻的 Instant 实例,表示当前时刻 |
| duration_since(other) | O(1) | O(1) | 计算自 other 以来的时间间隔,并返回一个 Duration 实例 |
std::time::Duration | from_secs(secs) | O(1) | O(1) | 创建一个新的 Duration 实例,表示指定秒数的时间间隔。这个方法通常用于表示一些较长的时间间隔 |
| as_secs() | O(1) | O(1) | 返回 Duration 中包含的总秒数。这个方法用于获取 Duration 结构体中表示的时间长度,以秒为单位 |
Networking
Data Structure / Trait | Method | Time Complexity | Space Complexity | Description |
std::net::TcpListener | bind(addr) | O(1)* | O(1) | 用于将 TCP 监听器绑定到指定地址 |
std::net::TcpStream | connect(addr) | O(1)* | O(1) | 用于连接到 TCP 监听器 |
| read(&mut buf) | O(n)* | O(1) | 从 TCP 流中读取数据 |
| write(&buf) | O(n)* | O(1) | 将数据写入 TCP 流 |
Feature / Trait | Use Case | Time Complexity | Space Complexity | Description |
Macros | macro_rules! macro_name {...} | Compile-time | - | 这是声明式宏的语法,通过模式匹配和模板替换来生成代码。使用 macro_rules! 可以定义一个名为 macro_name 的宏,根据传递的参数生成相应的代码 |
std::marker::PhantomData | Used in generic types | - | O(1) | 是一种零大小的类型标记,通常用于在泛型类型中表示“幽灵类型”,但在类型系统中仍然有意义,以确保类型参数的存在从而影响类型推导和生命周期约束。它不占用任何实际内存,但可以影响编译器的类型检查 |
Declarative Macros | macro_rules! | Compile-time | - | 声明式宏是 Rust 中的传统宏,使用 macro_rules! 定义,通过模式匹配来生成代码。 |
Procedural Macros | Custom derive, #[proc_macro] | Compile-time | - | 过程宏是更高级的宏,能够操作 Rust 抽象语法树(AST),用于实现自定义派生、属性宏或函数样式宏 |
Attribute Macros | #[attribute_macro] | Compile-time | - | 属性宏是应用于模块、函数或结构体上的宏,用于生成或修改代码 |
std::macro | concat! , env! , cfg! | Compile-time | - | Rust 提供了一些内置宏,用于处理常见的编译时任务。例如 concat! , env! , cfg! |
Unsafe
Feature | Use Case | Time Complexity | Space Complexity | Description |
unsafe blocks | unsafe { ... } | - | - | 执行编译器无法保证安全的操作 |
std::ptr | null() | - | - | 返回一个空的裸指针,用于表示无效或未初始化的指针 |
std::ptr | is_null() | - | - | 检查指针是否为空,常用于判断指针是否指向有效的内存 |
std::ptr | read() | - | - | 从指针指向的内存地址读取数据,需要确保内存地址有效且已初始化 |
std::ptr | write() | - | - | 将数据写入指针指向的内存地址,需确保指针指向有效内存且不违反所有权规则 |
引用
猛兽编程(微信公众号)
上次更新: 2024/08/21, 17:56:28