| Crates.io | double_vec_queue |
| lib.rs | double_vec_queue |
| version | 0.1.0 |
| created_at | 2026-01-18 18:33:37.02231+00 |
| updated_at | 2026-01-18 18:33:37.02231+00 |
| description | A simple FIFO queue implemented using two vectors. |
| homepage | https://github.com/johnw42/double_vec_queue |
| repository | https://github.com/johnw42/double_vec_queue.git |
| max_upload_size | |
| id | 2052817 |
| size | 21,556 |
A simple queue implementation using two vectors for efficient FIFO operations.
This crate provides a Queue<T> data structure that uses a dual-vector approach:
This design enables amortized O(1) push and pop operations while minimizing allocations.
TVec<T>Add this to your Cargo.toml:
[dependencies]
double_vec_queue = "0.1"
use double_vec_queue::Queue;
let mut queue = Queue::new();
// Push elements
queue.push(1);
queue.push(2);
queue.push(3);
// Pop elements (FIFO order)
assert_eq!(queue.pop(), Some(1));
assert_eq!(queue.pop(), Some(2));
// Peek at the front
assert_eq!(queue.peek(), Some(&3));
// Pop the remaining element
assert_eq!(queue.pop(), Some(3));
assert_eq!(queue.pop(), None);
use double_vec_queue::Queue;
let queue = Queue::from_vec(vec![1, 2, 3]);
use double_vec_queue::Queue;
let mut queue = Queue::from_vec(vec![1, 2, 3]);
// Iterate by reference
for item in &queue {
println!("{}", item);
}
// Iterate by mutable reference
for item in &mut queue {
*item += 10;
}
// Iterate by value (consumes queue)
for item in queue {
println!("{}", item);
}
The queue uses a dual-vector strategy where:
inbox vectoroutbox is empty, all elements from inbox are moved to outbox in reverse orderLicensed under either of Apache License, Version 2.0 or MIT license at your option.