推荐答案
在 Rust 中,Vec
是一个动态数组,提供了许多常用的方法来操作和管理其中的元素。以下是一些常用的 Vec
方法:
new()
- 创建一个空的Vec
。with_capacity(capacity: usize)
- 创建一个具有指定容量的Vec
。push(value: T)
- 在Vec
的末尾添加一个元素。pop() -> Option<T>
- 移除并返回Vec
的最后一个元素。len() -> usize
- 返回Vec
中元素的数量。is_empty() -> bool
- 检查Vec
是否为空。get(index: usize) -> Option<&T>
- 获取指定索引处的元素的引用。get_mut(index: usize) -> Option<&mut T>
- 获取指定索引处的元素的可变引用。insert(index: usize, element: T)
- 在指定索引处插入一个元素。remove(index: usize) -> T
- 移除并返回指定索引处的元素。clear()
- 清空Vec
中的所有元素。contains(&value: &T) -> bool
- 检查Vec
是否包含指定的值。sort()
- 对Vec
中的元素进行排序。drain(range: R) -> Drain<T>
- 移除指定范围内的元素并返回一个迭代器。extend(iter: impl IntoIterator<Item = T>)
- 将迭代器中的元素添加到Vec
的末尾。
本题详细解读
new()
new()
方法用于创建一个空的 Vec
。由于 Vec
是动态数组,初始时没有分配任何内存。
let v: Vec<i32> = Vec::new();
with_capacity(capacity: usize)
with_capacity
方法创建一个具有指定容量的 Vec
。这可以避免在添加元素时频繁重新分配内存。
let v: Vec<i32> = Vec::with_capacity(10);
push(value: T)
push
方法在 Vec
的末尾添加一个元素。如果 Vec
的容量不足,会自动扩容。
let mut v = Vec::new(); v.push(1); v.push(2);
pop() -> Option<T>
pop
方法移除并返回 Vec
的最后一个元素。如果 Vec
为空,则返回 None
。
let mut v = vec![1, 2, 3]; let last = v.pop(); // last = Some(3)
len() -> usize
len
方法返回 Vec
中元素的数量。
let v = vec![1, 2, 3]; let length = v.len(); // length = 3
is_empty() -> bool
is_empty
方法检查 Vec
是否为空。
let v: Vec<i32> = Vec::new(); let is_empty = v.is_empty(); // is_empty = true
get(index: usize) -> Option<&T>
get
方法获取指定索引处的元素的引用。如果索引超出范围,则返回 None
。
let v = vec![1, 2, 3]; let element = v.get(1); // element = Some(&2)
get_mut(index: usize) -> Option<&mut T>
get_mut
方法获取指定索引处的元素的可变引用。如果索引超出范围,则返回 None
。
let mut v = vec![1, 2, 3]; if let Some(element) = v.get_mut(1) { *element = 5; }
insert(index: usize, element: T)
insert
方法在指定索引处插入一个元素。插入点之后的元素会向后移动。
let mut v = vec![1, 2, 3]; v.insert(1, 4); // v = [1, 4, 2, 3]
remove(index: usize) -> T
remove
方法移除并返回指定索引处的元素。移除点之后的元素会向前移动。
let mut v = vec![1, 2, 3]; let removed = v.remove(1); // removed = 2, v = [1, 3]
clear()
clear
方法清空 Vec
中的所有元素,但不释放内存。
let mut v = vec![1, 2, 3]; v.clear(); // v = []
contains(&value: &T) -> bool
contains
方法检查 Vec
是否包含指定的值。
let v = vec![1, 2, 3]; let contains = v.contains(&2); // contains = true
sort()
sort
方法对 Vec
中的元素进行排序。
let mut v = vec![3, 1, 2]; v.sort(); // v = [1, 2, 3]
drain(range: R) -> Drain<T>
drain
方法移除指定范围内的元素并返回一个迭代器。
let mut v = vec![1, 2, 3, 4, 5]; let drained: Vec<_> = v.drain(1..3).collect(); // drained = [2, 3], v = [1, 4, 5]
extend(iter: impl IntoIterator<Item = T>)
extend
方法将迭代器中的元素添加到 Vec
的末尾。
let mut v = vec![1, 2, 3]; v.extend([4, 5].iter().cloned()); // v = [1, 2, 3, 4, 5]