Rust 的 VecDeque 是一个双端队列,它允许你在队列的两端高效地插入和删除元素。VecDeque 底层使用了一个动态数组,当数组的空间不足时,它会自动扩容。这使得 VecDeque 在许多场景下都非常高效。
以下是一些使用 VecDeque 的高效操作:
插入元素:
push_back()push_front()insert()删除元素:
pop_back()pop_front()remove()访问元素:
front()back()get()遍历元素:
iter() 或 iter_mut()判断队列是否为空:
is_empty()获取队列长度:
len()示例:
use std::collections::VecDeque;
fn main() {
let mut deque: VecDeque<i32> = VecDeque::new();
// 在队列尾部插入元素
deque.push_back(1);
deque.push_back(2);
deque.push_back(3);
// 在队列头部插入元素
deque.push_front(0);
// 删除队列尾部的元素
deque.pop_back();
// 删除队列头部的元素
deque.pop_front();
// 访问队列头部的元素
println!("Front element: {}", deque.front().unwrap());
// 访问队列尾部的元素
println!("Back element: {}", deque.back().unwrap());
// 获取队列长度
println!("Queue length: {}", deque.len());
// 使用迭代器遍历队列中的所有元素
for item in deque.iter() {
println!("{}", item);
}
}
这些操作都是高效的,因为 VecDeque 的实现保证了在插入和删除元素时,时间复杂度为 O(1)。但是,当 VecDeque 需要扩容时,时间复杂度会变为 O(n)。为了避免这种情况,你可以在创建 VecDeque 时预先分配足够的空间,或者在使用过程中尽量避免频繁地插入和删除元素。