Rust 语言本身并没有一个被称为 STL (Standard Template Library) 的库,这是 C++ 的标准库组件。然而,Rust 有一个非常强大的标准库,其中包含了许多功能和数据结构,这些在某种程度上与 C++ 的 STL 相似。以下是 Rust 中一些常用的标准库组件:
- 向量(Vec)
向量是 Rust 中最常用的动态数组。它可以存储多个同类型的值,并在运行时动态地增长或缩小。
let mut vec = Vec::new();
vec.push(1);
vec.push(2);
vec.push(3); - 字符串(String 和 &str)
Rust 中处理文本的主要方式是通过 String 和 &str 类型。String 是可增长的,存储在堆上;&str 是字符串切片,通常用于借用字符串。
let s: String = “Hello”.to_string();
let slice: &str = &s[0…2]; - 哈希映射(HashMap)
HashMap 提供了一个基于哈希表的键值对集合。
use std::collections::HashMap;
let mut map = HashMap::new();
map.insert(“key1”, “value1”);
map.insert(“key2”, “value2”);
4. 选项(Option)
Option 类型用于安全地处理可能不存在的值。它是一个枚举,表示可能有值(Some)或没有值(None)。
fn divide(numerator: f64, denominator: f64) -> Option {
if denominator == 0.0 {
None
} else {
Some(numerator / denominator)
}
}
5. 结果(Result)
Result 类型用于错误处理,它可以是 Ok(表示操作成功并包含结果值)或 Err(包含错误信息)。
fn check_number(num: i32) -> Result<i32, String> {
if num > 0 {
Ok(num)
} else {
Err(“Number must be positive”.to_string())
}
}
6. 迭代器(Iterator)
迭代器是 Rust 中处理集合的强大工具,支持惰性迭代。
let v = vec![1, 2, 3, 4];
let v_squared: Vec = v.iter().map(|&x| x * x).collect();
7. 其他集合
Rust 还提供了其他类型的集合,如 VecDeque、LinkedList、HashSet 等,它们在 std::collections 模块中定义。
这些是 Rust 标准库中的一些基本组件,它们为数据管理和操作提供了强大的支持,使 Rust 成为一个高效且安全的系统编程语言。
在 Rust 中,虽然没有名为 STL 的库,但其标准库提供了丰富的数据结构和工具,这些可以视为 Rust 的标准库组件。除了前面提到的 Vec、String、HashMap、Option 和 Result 等,还有许多其他有用的组件和数据结构。下面是一些额外的、常用的 Rust 标准库组件:
- BTreeMap 和 BTreeSet
这些数据结构基于 B 树实现。BTreeMap 提供了一个基于键的有序映射,而 BTreeSet 是一个有序集合。
use std::collections::BTreeMap;
let mut map = BTreeMap::new();
map.insert(3, “c”);
map.insert(1, “a”);
map.insert(2, “b”);
2. BinaryHeap
BinaryHeap 是一个优先队列实现,提供了快速的最大元素查找。
use std::collections::BinaryHeap;
let mut heap = BinaryHeap::new();
heap.push(1);
heap.push(5);
heap.push(2);
assert_eq!(heap.peek(), Some(&5));
3. LinkedList
LinkedList 是一个双向链表,支持从两端快速插入和删除。
use std::collections::LinkedList;
let mut list = LinkedList::new();
list.push_back(‘a’);
list.push_back(‘b’);
list.push_front(‘c’);
4. HashSet
HashSet 是一个无序集合,用于快速成员检查,不允许重复元素。
use std::collections::HashSet;
let mut books = HashSet::new();
books.insert(“1984”);
books.insert(“Animal Farm”);
5. Rc 和 Arc
Rc(引用计数)和 Arc(原子引用计数)是智能指针,用于管理具有多个所有者的数据。Arc 是线程安全的版本。
use std::rc::Rc;
use std::sync::Arc;
let five = Rc::new(5);
let five2 = five.clone();
let number = Arc::new(5);
let number2 = Arc::clone(&number);
6. Cell 和 RefCell
Cell 和 RefCell 提供了内部可变性。Cell 提供了值的内部可变性,而 RefCell 则检查借用规则(运行时)。
use std::cell::RefCell;
let x = RefCell::new(42);
*x.borrow_mut() = 45;
7. Mutex 和 RwLock
这些是同步原语,用于在多线程环境中保护数据。Mutex 允许互斥访问,而 RwLock 允许多个读取者或一个写入者。
use std::sync::Mutex;
let m = Mutex::new(5);
{
let mut num = m.lock().unwrap();
*num = 6;
}
8. Channels
Rust 的通道(channels)提供了线程间的通信方式。有多种通道类型,如单向、多向等。
use std::sync::mpsc;
let (tx, rx) = mpsc::channel();
tx.send(10).unwrap();
assert_eq!(rx.recv().unwrap(), 10);
这些组件和数据结构是 Rust 标准库的一部分,为开发者提供了强大的工具集,以构建高效、安全的应用程序。